这是我最初的清单:
>>> List1 = (List.most_common())
>>> print (List1)
>>> [('d', 17), ('a', 17), ('c', 17), ('q', 6), ('w', 4), ('s', 3), ('i', 2), ('p', 2), ('f', 2), ('h', 2), ('n', 2), ('g', 2), ('j', 2), ('u', 1), ('b', 1)]
从文本生成,它是每个字母在文本中出现的次数。
>>> HighestFactor = List1[0][1]
HighestFactor = 17是我得到的,因为字母出现的最高数字总是会在那个位置上
在这种情况下,我需要做的是获得最多的一个(" D"," A"和#34; C")如果有的话如果不是仅仅打印字母,则使用相同数量的外观按字母顺序对它们进行排序。 我首先创建的列表只有那些等于HighestFactor的列表,所以我可以按字母顺序对该列表进行排序并获得我需要的内容
>>> Last_list = for (x,y) in List1
if y = HighestFactor:
我认为这是我能从解决方案中得到的最接近的,但它没有用。
将其视为:
(' d',17)=(x,y)
(' a',17)=(x,y)
(' c',17)=(x,y)
和
17 = y = HighestFactor
列表中只包含y = HighestFactor的元素。
结果应该是:
>>> print Last_list
>>> [('d', 17), ('a', 17), ('c', 17)]
答案 0 :(得分:2)
max_val = max(x, key= lambda y : y[1])[1]
max_lst = filter(lambda y: y[1] == max_val, x)
sorted_lst = sorted(max_lst, key = lambda z : z[0])
第一行选择列表中的最大值,第二行创建一个仅包含等于最大值的列表,第三行按字母顺序对结果进行排序。
答案 1 :(得分:2)
假设数据未排序,
data = [('d', 17), ('a', 17), ('c', 17), ('q', 6), ('w', 4), ('s', 3), ('i', 2), ('p', 2), ('f', 2), ('h', 2), ('n', 2), ('g', 2), ('j', 2), ('u', 1), ('b', 1)]
max_count = max(data, key=lambda datum: datum[1])[1]
tops = sorted(alphabet for alphabet, count in data if count == max_count)
由于您希望对输出进行排序...
答案 2 :(得分:2)
让我们稍微分解一下。
从Counter
调用判断,您看起来好像是从most_common()
实例开始。这是一个好的开始。 most_common
按计数器值排序,这是您想要的。
要仅使用共享最高价值的most_common()
元素,我会使用itertools.takewhile()
:
highest_count_iter = itertools.takewhile(lambda x: x[1] == counter.most_common(1)[1], counter.most_common())
或者,如果您希望稍微打破一下:
elements = counter.most_common()
highest_count = elements[0][1]
highest_count_iter = itertools.takewhile(lambda x: x[1] == highest_count, elements)
这将为您提供一个迭代器,它只产生共享最高值的对。
然后,您可以在不使用排序键的情况下对此进行排序,因为Python元组按元素排序,并且您知道所有元素的第二个值共享相同的计数:
print sorted(highest_count_iter)
答案 3 :(得分:1)
鉴于您可以获得final = list(filter(lambda x: x[1] == HighestFactor, List1))
您想要使用列表理解:
{{1}}
使用python功能内置函数的更快方法可能是:
{{1}}
答案 4 :(得分:1)
from itertools import takewhile
LastLettersList = zip(*takewhile(lambda x:x[-1] == HighestFactor,List1))[0]
可能?
答案 5 :(得分:1)
这应该这样做:
>>> a = [('d', 17), ('a', 17), ('c', 17), ('q', 6), ('w', 4), ('s', 3), ('i', 2), ('p', 2), ('f', 2), ('h', 2), ('n', 2), ('g', 2), ('j', 2), ('u', 1), ('b', 1)]
>>> mx = max(map(lambda x: x[1], a))
>>> sorted(filter(lambda x: x[1] == mx, a), key=lambda x: x[0])
[('a', 17), ('c', 17), ('d', 17)]