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并没起作用,交换顺序也没区别,具体原因是什么暂时不清楚。

 

转载于:https://www.cnblogs.com/nlp-yekai/p/3760094.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值