Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用调用每个索引的第二个元素的语句从列表创建列表_Python_List_Sorting_If Statement - Fatal编程技术网

Python 使用调用每个索引的第二个元素的语句从列表创建列表

Python 使用调用每个索引的第二个元素的语句从列表创建列表,python,list,sorting,if-statement,Python,List,Sorting,If Statement,这是我最初的清单: >>> 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), ('

这是我最初的清单:

    >>> 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”和“C”),如果有超过1个具有相同数量的外观,则按字母顺序排序,如果不只是打印字母的话。 我首先想到的是创建一个列表,其中只有那些等于最高因子的,这样我就可以按字母顺序对列表进行排序,并得到我需要的

    >>> Last_list = for (x,y) in List1
                     if y = HighestFactor:
我想这是我能从解决方案中得到的最接近的结果,但它没有起作用

可以这样想:

('d',17)=(x,y)

('a',17)=(x,y)

('c',17)=(x,y)

17=y=最高系数

只列出y=HighestFactor的元素

结果应该是:

    >>> print Last_list
    >>> [('d', 17), ('a', 17), ('c', 17)]

如果您可以获得
最高因子
,则您需要使用列表理解:

final = [x for x in List1 if x[1] == HighestFactor]
使用python函数内置项的更快方法可能是:

final = list(filter(lambda x: x[1] == HighestFactor, List1))
也许吧


第一行从列表中选择最大值,第二行创建一个仅包含等于最大值的值的列表,第三行按字母顺序对结果排序

假设数据未排序

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)
由于您希望对输出进行排序…

这应该可以做到:

>>> 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)]

让我们把它分解一下

most_common()。这是一个好的开始<代码>最常见的
是按计数器值排序的,这是您想要的

要仅获取共享最高值的
most_common()
元素,我将使用
itertools.takewhile()

或者,如果您也愿意将其分解一下:

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)

作为一种风格,在Python中不应该将变量名大写。另外,不要使用
list
(或
list
)作为变量名,因为它是内置类型的名称。您可以使用
过滤器(lambda x:x[1]==max(List1,key=lambda x:x[1])[1],List1)
,无论是否可读。等等,您的问题说您希望它们按字母顺序排序,但您的示例输出是有序的(d,a,c)而不是(a,c,d)。这只是一个疏忽吗?@peterdegloper如果列表上出现的次数超过1次,我需要按字母顺序排列,所以应该是最后一次step@MarkReed是的,马克,我不得不重新命名我的变量以放在github上,因为我是巴西人,它们放在葡萄牙语上,然后我用了我脑海中出现的第一件事哈哈哈,我错了,我知道现在使用的名称是命令,但不是大写,谢谢你提供的信息谢谢你没有像大多数其他答案一样使用N**2算法;P+1我认为它们仍然都是n log n(至少有一种排序),只是额外传递了max和/或filter。这并不是说,如果坚持计算,比如说,拉丁字母表中的字母,这是最大的问题。我看到了,但你能解释一下它是如何工作的吗?比如,我不知道如何从列表中的每个元素中筛选第二个元素,这个代码在哪里呢?知道(d,17)=(x,y)会根据键来查找最大元素,即数据中每个元组的第二个元素。它返回
('d',17)
。因为我们想要17个,所以我们在最后通过
[1]
得到它。现在,检查列表,并检查要检索的字母表的计数是否与最高的字母表匹配。内置函数(max、sorted)、解包、生成器和匿名函数在编写简洁且易于阅读的代码时都很重要。非常感谢=)最后一个问题是字母表的字母表,计数在知道(x,y)这里你说的是x=字母表,y=计数,对吧?x是我的名单?其中
max\u val=max(x,key=lambda y:y[1])[1]
u取最大值?如果我想要第三个值,甚至第一个值,我应该更改什么?从我所怀疑的所有解决方案中,我不知道他们给我的代码中“魔法”发生在哪里,在他们的代码中他们改变了索引,或者放y而不是x,然后第二个值就是他们得到的,而不是第一个或任何其他值
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)
print sorted(highest_count_iter)