我想完成的是一种算法,该算法从整个字符串列表中查找重复最多的字母。我是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)
答案 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
使用上述键找到最常见的字母。