抓住字符串中最重复的字母

时间:2020-02-05 23:49:28

标签: python-3.x list duplicates

我想完成的是一种算法,该算法从整个字符串列表中查找重复最多的字母。我是Python的新手,所以花了大约两个小时才到达这个阶段。我当前代码的问题是,当我只寻找重复次数最多的字母时,它将返回每个重复的字母。另外,我想知道一种不使用两个for循环的更快方法。

代码:

rock_collections = ['aasdadwadasdadawwwwwwwwww', 'wasdawdasdasdAAdad', 'WaSdaWdasSwd', 'daWdAWdawd', 'QaWAWd', 'fAWAs', 'fAWDA']

seen = []
dupes = []

for words in rock_collections:
  for letter in words:
    if letter not in seen:
      seen.append(letter)
    else:
      dupes.append(letter)

print(dupes)

1 个答案:

答案 0 :(得分:0)

如果您要查找出现次数最多的字母,我建议使用以下代码:

def get_popular(strings):
    full = ''.join(strings)
    unique = list(set(full))
    return max(
        list(zip(unique, map(full.count, unique))), key=lambda x: x[1]
    )


rock_collections = [
    'aasdadwadasdadawwwwwwwwww',
    'wasdawdasdasdAAdad',
    'WaSdaWdasSwd',
    'daWdAWdawd',
    'QaWAWd',
    'fAWAs',
    'fAWDA'
]
print(get_popular(rock_collections))  # ('d', 19)

让我为您分解代码:

full包含每个字符串,并且它们之间没有任何字母。 set(full)产生一个集合,这意味着它仅一次包含每个唯一字母。 list(set(full))将其重新放入列表,这意味着当您遍历集合中的元素时,它将保留顺序。

map(full.count, unique)遍历每个唯一字母,并计算字符串中有多少个字母。 zip(unique, ...)将这些数字与各自的字母一起放入。 key=lambda x: x[1]是一种说法,不要取元组的最大值,而取元组的 second元素的最大值(即字母的次数)出现)。 max使用上述键找到最常见的字母。