簡體   English   中英

使用列表理解從列表中刪除單詞

[英]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是一個數組,您將單詞與一個數組共同映射,這就是它不起作用的原因。

如果您不介意:

  1. 刪除重復項
  2. 保留原始訂單

您可以簡單地使用“設置”(這是核心算法):

>>> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM