• python中判断语句用两个or连接的奇葩


    学python的时候犯的一个错误,放在这吧。就是在循环某个列表的时候不要去操作它,这是容易忽略的一个地方。所以如果要操作某个列表本身,那么先把该列表copy一份,然后再读取的时候读copy的那份。操作原来的列表。

    正确的如下:

    import re
    
    a="hen/zg /zg qd/a /a ,/x /x hen/zg /zg xh/v /v "
    b=re.split('[ ]', a)
    b_copy=b[:]
    print b
    cixing=["/x","/zg","/uj","/ul","/e","/d"]
    for seg in b_copy:
        for k in cixing:
            if k in seg:
                b.remove(seg)
    print b

    分割线...........................................................................................................

    首先来看问题,在做完词性标注后,我要将部分词性的词去掉,如代码中,列表cixing所示:if的判断语句不能只用 k in seg,因为,这种情况不能去除k==seg的情况。所以需要两个判断语句

    即:if k==seg or k in seg:

    好的,问题来了,请看测试结果

    import re
    
    a="hen/zg /zg qd/a /a ,/x /x hen/zg /zg xh/v /v "
    b=re.split('[ ]', a)
    print b
    cixing=["/x","/zg","/uj","/ul","/e","/d"]
    for seg in b:
        for k in cixing:
            if k==seg or k in seg:
                b.remove(seg)
    print b
    ['hen/zg', '/zg', 'qd/a', '/a', ',/x', '/x', 'hen/zg', '/zg', 'xh/v', '/v', '']
    ['/zg', 'qd/a', '/a', '/x', '/zg', 'xh/v', '/v', '']
    [Finished in 0.0s]

    看另一种,我把判断语句写成K==seg,不加后面的k in seg:

     1 import re
     2 
     3 a="hen/zg /zg qd/a /a ,/x /x hen/zg /zg xh/v /v "
     4 b=re.split('[ ]', a)
     5 print b
     6 cixing=["/x","/zg","/uj","/ul","/e","/d"]
     7 for seg in b:
     8     for k in cixing:
     9         if k==seg:
    10             b.remove(seg)
    11 print b
    ['hen/zg', '/zg', 'qd/a', '/a', ',/x', '/x', 'hen/zg', '/zg', 'xh/v', '/v', '']
    ['hen/zg', 'qd/a', '/a', ',/x', 'hen/zg', 'xh/v', '/v', '']
    [Finished in 0.0s]

    显然,在用or连接两个判断语句的时候,k==seg并没起作用,交换顺序也没区别,具体原因是什么暂时不清楚。

  • 相关阅读:
    数据库架构的演变
    一个简单的跨库事务问题
    一个优美的架构需要考虑的几个问题
    铁道部新客票系统设计
    详细介绍软件架构设计的三个维度
    单代号网络图
    分库分表带来的完整性和一致性问题
    软件架构设计箴言理解
    设计高并发的电子商店
    mysql之索引补充
  • 原文地址:https://www.cnblogs.com/nlp-yekai/p/3760094.html
Copyright © 2020-2023  润新知