如何创建文本文件中所有单词(字母重复的单词除外)的列表

2024-06-26 04:18:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试遍历一个列表,并将所有单词附加到一个新列表中,不包括具有重复字母的单词。你知道吗

示例:

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']

代码实际上不起作用,因为像weevil这样的词可以满足字数.count(字母)字母“w”的条件,两个“e”通过两次,然后在两个“e”之后再满足三次,这就是为什么它出现在列表中四次。你知道吗

也许我是从错误的角度来看待这个问题,但我真的很困惑如何做到这一点。你知道吗


Tags: in列表for字母单词carcatword
3条回答

发生这种情况是因为它每次检查字母时都会附加单词。在追加单词之前,应该检查所有字母,这样就可以添加一个检查变量,查看是否所有字母都通过了,然后再追加单词。例如:

    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']

如果你有问题,你可以

>>> [w for w in words if len(set(w)) == len(w)]
['cat', 'car', 'lizard']

如果一个单词没有重复的字母,那么它的长度就是它的字母集的长度。剩下的就是把这个放到list comprehension。你知道吗

尝试使用标准库提供的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

相关问题 更多 >