【问题标题】:Print items in a list which all contain at least one same character打印列表中至少包含一个相同字符的项目
【发布时间】:2021-07-16 20:10:32
【问题描述】:

我想编写一个函数来打印列表中包含至少一个相似字符的项目以及它在每个项目中出现的次数。 例如,如果我有以下列表:

ex = ['bat', 'cat', 'task', 'tank', 'tan']

每个项目至少包含一次字母“a”和“t”。

我知道我可以使用

for string in ex:
        for letter in string:
            x = string.count("a")
        print(string, "has", x, "a")

    for string in ex:
        for letter in string:
            x = string.count("t")
        print(word, "has", x, "t")

如果我想更改列表,我将如何在不指定要搜索的实际字符的情况下执行此操作?

【问题讨论】:

  • 在列表元素上加上引号

标签: python list


【解决方案1】:

使用dictionary

example = ['bat', 'cat', 'task', 'tank', 'tan']

d = {}
for val in example:
    for element in val:
        if element in d.keys():
            d[element] = d[element] + 1
        else:
            d[element] = 1
print(d)

输出

{'b': 1, 'a': 5, 't': 5, 'c': 1, 's': 1, 'k': 2, 'n': 2}

【讨论】:

  • 您可以省略.keys() 并使用d[element] += 1 代替d[element] = d[element] + 1
  • @asdf101 感谢您的提示!
【解决方案2】:

这是一个简单的代码:)


from functools import reduce

ex = ["bat", "cat", "task", "tank", "tan"]

reduce(lambda a,b: a.intersection(b) ,[set(e) for e in ex])

【讨论】:

    【解决方案3】:

    如果使用[set(x) for x in ex] 将每个单词转换为一组字符,则可以使用set.intersection() 返回一组所有单词共有的字符。然后对于每个字母,您可以重复您的代码。

    ex = ['bat', 'cat', 'task', 'tank', 'tan']
    
    common_letters = set.intersection(*[set(x) for x in ex])
    
    for letter in common_letters:
        for string in ex:
            x = string.count(letter)
            print(string, "has", x, letter)
    

    【讨论】:

      【解决方案4】:

      你可以这样做(json 库在这里仅用于漂亮的打印)

      import json
      
      
      arr = ['bat', 'cat', 'task', 'tank', 'tan']
      
      letters = set(''.join(arr))
      
      d = {}
      
      for letter in letters:
          d[letter] = {'words' : [], 'counts' : []}
      
      for letter in letters:
          for word in arr:
              if letter in word:
                  d[letter]['words'].append(word)
                  d[letter]['counts'].append(word.count(letter))
      
      pretty = json.dumps(d, indent=4)
      print(pretty)
      

      Try it online!

      【讨论】:

        猜你喜欢
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 2022-01-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多