【问题标题】:How to create a list of all words in a text file except for words with duplicate letters如何创建文本文件中所有单词的列表,除了具有重复字母的单词
【发布时间】:2017-10-13 07:19:31
【问题描述】:

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

例子:

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(letter) 条件,为两个“e”传递两次,然后在两个之后再满足三个'e 这就是它在列表中出现四次的原因。

也许我从错误的角度来解决这个问题,但我真的不知道如何做到这一点。

【问题讨论】:

    标签: python list loops


    【解决方案1】:

    IIUC 你的问题,你可以使用

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

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

    【讨论】:

    • 太棒了!这很有效,而且比我从讲师那里得到的答案要高效 10 行代码,谢谢。
    【解决方案2】:

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

    【讨论】:

      【解决方案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']
      

      【讨论】:

        【解决方案4】:

        在 [1] 中:def 重复(单词): ...: for i in word: ...:如果 word.count(i) > 1:返回 True ...:返回错误

        在[4]中:new = [word in words if not duplicate(word)] 在[5]中:新 出[5]:['猫','汽车','蜥蜴']

        【讨论】:

          【解决方案5】:

          我们可以使用 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']
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-11-04
            • 2017-03-26
            • 1970-01-01
            • 2015-02-16
            • 2014-11-21
            • 2019-11-21
            • 2021-12-31
            相关资源
            最近更新 更多