2016-04-30 69 views
0

我有一本字典和字母:消除詞

import string 
alphabet = list(string.ascii_lowercase) 
dictionary = [line.rstrip('\n') for line in open("dictionary.txt")] 

在一個功能,我從字母表

刪除信現在,我要通過字典來過濾如果他們包含不在字母表中的字母,則可以消除這些字詞。

我試圖for循環:

for term in dictionary: 
     for char in term: 
      print term, char 
      if char not in alphabet: 
       dictionary.remove(term) 
       break 

然而,這種跳過某些詞。 我試圖過濾:

dictionary = filter(term for term in dictionary for char in term if char not in alphabet) 

但我得到的錯誤:

SyntaxError: Generator expression must be parenthesized if not sole argument 
+0

提供給過濾器的功能如何? –

+1

** dictionary **在Python中有非常具體的含義。考慮使用另一個變量名稱以避免混淆。 – CaffeineFueled

回答

4

你不想當你迭代它來修改列表(或任何真正的容器)。這可能會導致出現錯誤,似乎有些項目正在被跳過。如果你做一個副本(dictionary[:]),它應該工作了...

for term in dictionary[:]: 
    for char in term: 
     print term, char 
     if char not in alphabet: 
      dictionary.remove(term) 
      break 

我們也許可以做得更好這裏太...

alphabet_set = set(alphabet) # set membership testing is faster than string/list... 
new_dictionary = [ 
    term for term in dictionary 
    if all(c in alphabet_set for c in term)] 

此外,它可能是明智的,以避免名稱dictionarylist實例,因爲dict實際上是一個內置類型...