學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