[英]removing words from a list using list comprehension
我正在嘗試從列表中刪除不必要的單詞(一個,一個,一個)
Test = ['a', 'an', 'the', 'love']
unWantedWords = ['a', 'an', 'the']
RD1 = [x for x in Test if x != unWantedWords]
print(RD1)
output ->['a', 'an', 'the', 'love']
這是什么錯?
問題是您正在將值x與整個列表unWantedWords進行比較。
RD1 = [x for x in Test if x != unWantedWords]
將!=替換為not in,以檢查x是否為... not in!
RD1 = [x for x in Test if x not in unWantedWords]
RD1 = [x for x in Test if x not in unWantedWords]
unWantedWords是一個數組,您將單詞與一個數組共同映射,這就是它不起作用的原因。
如果您不介意:
您可以簡單地使用“設置”(這是核心算法):
>>> Test = ['a', 'an', 'the', 'love']
>>> unWantedWords = ['a', 'an', 'the']
>>> print set(Test) - set(unWantedWords)
set(['love'])
>>> print list(set(Test) - set(unWantedWords))
['love']
這具有優化的復雜性的優點。
當然,您可以包裝此代碼以保留重復項和順序...
錯了
RD1 = [x for x in Test if x != unWantedWords]
您的條件是否為x!= unWantedWords會檢查x是否等於列表unWantedWords,而不是檢查x在unWantedWords中是否存在。
該條件始終為true,因為x是一個字符串而不是一個列表。 因此,您所有的單詞都會添加到列表中。
正確的習慣用法是, 如果x不在unWantedWords中 。
您可以這樣做, RD1 = [x for x in Test if x not in set(unWantedWords)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.