我正在尝试遍历列表,并将所有单词追加到新列表中,不包括具有重复字母的单词。
示例:
words = ['cat', 'car', 'weevil', 'lizard', 'mammoth', 'cabbage', 'aardvaark']
newlist = []
for word in words:
for letter in word
if word.count(letter) > 1:
pass
else:
newlist.append(word)
print(newlist)
# Result
['cat', 'cat', 'cat', 'car', 'car', 'car', 'weevil', 'weevil', 'weevil', 'weevil', 'lizard', 'lizard', 'lizard', 'lizard', 'lizard', 'lizard', 'mammoth', 'mammoth', 'mammoth', 'mammoth', 'cabbage', 'cabbage', 'cabbage', 'aardvaark', 'aardvaark', 'aardvaark']
代码实际上并不起作用,因为像象鼻虫这样的单词会满足字母'w'的word.count(字母)条件,两个'e'会传递两次,然后在两个'e之后再满足三次这就是为什么它四次出现在名单中的原因。
也许我是从错误的角度接近这个,但我真的很难于如何做到这一点。
答案 0 :(得分:4)
IIUC你的问题,你可以使用
>>> [w for w in words if len(set(w)) == len(w)]
['cat', 'car', 'lizard']
如果单词没有重复的字母,则其长度将是其字母集的长度。其余的只是将其放入list comprehension。
答案 1 :(得分:0)
尝试使用标准库提供的filter
功能
words = ['cat', 'car', 'weevil', 'lizard', 'mammoth', 'cabbage', 'aardvaark']
newlist = list( filter(lambda x: unduplicate_letter(x), words) )
def unduplicate_letters(w):
for letter in w:
if w.count(letter) > 1:
return False
return True
答案 2 :(得分:0)
这种情况正在发生,因为它每次检查一封信时都会追加该字。您应该在附加单词之前检查所有字母,这样您就可以添加一个检查变量来查看是否所有字母都通过了然后附加单词。例如:
words = ['cat', 'car', 'weevil', 'lizard', 'mammoth', 'cabbage', 'aardvaark']
newlist = []
for word in words:
check = 0
for letter in word:
if word.count(letter) > 1:
check = 1
if (check == 0):
newlist.append(word)
print(newlist)
输出:
['cat', 'car', 'lizard']
答案 3 :(得分:0)
在[1]中:def复制(单词): ......:我的言语: ...:如果word.count(i)> 1:返回True ......:返回False
在[4]中:new = [单词中的单词如果不重复(单词)] 在[5]中:新的 出[5]:['猫','车','蜥蜴']
答案 4 :(得分:0)
我们可以使用Python set()
来帮助提供更简单的解决方案:
$ cat /tmp/tmp.py
from __future__ import print_function
words = ['cat', 'car', 'weevil', 'lizard', 'mammoth', 'cabbage', 'aardvaark']
newlist = list()
for word in words:
# if word inlude multiple occurances of same character, set()
# will keep only one occurance.
if len(set(word)) == len(word):
newlist.append(word)
print(newlist)
$ python /tmp/tmp.py
['cat', 'car', 'lizard']