我需要帮助来创建一个程序,该程序可以搜索列表并打印出在位置0处重复最多的字母。现在,我有以下内容:
lst=['Bill','Kev','Bard','Mike']
lst2=list()
for word in lst:
lst3.append(word[0])
print(lst3)
众所周知,这会创建一个列表['B','K','B','M'] 我怎样才能使它打印出位置0上重复次数最多的字母?
太复杂了,我还是个新人
答案 0 :(得分:4)
from collections import Counter
# Inside the Counter I use list comprehenshion to get the first letter from each word
counter = Counter([word[0] for word in lst])
counter.most_common(1) # --> [('B', 2)]
答案 1 :(得分:1)
您可以使用Counter
和许多匿名函数:
from collections import Counter
from functools import reduce
lst = ['Bill','Kev','Bard','Mike']
max_value = max(
reduce(
lambda p, x: p.update([x]) or p,
map(lambda x:x[0], lst),
Counter()).items(),
key=lambda x:x[1])[0]
print(max_value)
答案 2 :(得分:1)
我不需要库来解决这个问题,但是我不得不说以前的回答非常优雅,如果您不熟悉python库,这是一个原始的选择:
1-假设您具有以下数组:
a = ['a','b','c','d','a','b','c','d','a']
2-然后我建议对它进行排序:
a.sort()
out[]: [a,a,a,b,b,c,c,d,d]
3-对数组进行排序后,您只需确定它何时从一个字母变为另一个字母即可,如以下代码所示:
a = ['a','b','c','d','a','b','c','d','a']
a.sort()
counter = 0
for i in range(len(a)):
counter += 1
try:
if(a[i] != a[i+1]):
print(a[i] + ' is ' + str(counter) + ' times' )
counter = 0
except:
print(a[i] + ' is ' + str(counter) + ' times' )
我使用try-except来处理数组的末尾,无论如何,代码都是以简单的方式构建的,无需应用任何库,正如我之前提到的那样,之前的响应非常优雅并且具有更好的性能,但这也许可以帮助您增进您对如何建立算法的了解。最好的祝福是继续编码:)