python中判斷語句用兩個or鏈接的奇葩

學python的時候犯的一個錯誤,放在這吧。就是在循環某個列表的時候不要去操做它,這是容易忽略的一個地方。因此若是要操做某個列表自己,那麼先把該列表copy一份,而後再讀取的時候讀copy的那份。操做原來的列表。python

正確的以下:測試

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

 

 

分割線...........................................................................................................spa

首先來看問題,在作完詞性標註後,我要將部分詞性的詞去掉,如代碼中,列表cixing所示:if的判斷語句不能只用 k in seg,由於,這種狀況不能去除k==seg的狀況。因此須要兩個判斷語句code

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

好的,問題來了,請看測試結果ci

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:rem

 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並沒起做用,交換順序也沒區別,具體緣由是什麼暫時不清楚。it

相關文章
相關標籤/搜索