python中元组列表的列式提取

2024-04-26 04:16:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我这里有一个元组列表

A =[[(1, 52), (1, 12), (-1, -1)],[(-1, 23), (1, 42), (-1, -1)],[(1, -1), (-1, -1), (1, 42)]]

我想要得到在元组的第二个元素中包含最大值的元组。在

我试着访问这样的列

A[:,2]

但我得到了错误

TypeError: list indices must be integers, not tuple

提前谢谢,如果您需要其他信息,请告诉我

编辑1:

期望输出:

^{pr2}$

Tags: integers信息元素编辑列表错误notbe
3条回答

你可以试试这个:

A =[[(1, 52), (1, 12), (-1, -1)],[(-1, 23), (1, 42), (-1, -1)],[(1, -1), (-1, -1), (1, 42)]]

new_A = [max(a, key=lambda x: x[-1]) for a in zip(*A)] 

输出:

^{pr2}$
[max(a,key=lambda x:x[1]) for a in zip(*A)]

输出:

^{pr2}$

让我知道如果这对你有用,我会解释答案。在

您可以访问这样的列。。在

>>> list(zip(*A)[0])
[(1, 52), (-1, 23), (1, -1)]
>>> list(zip(*A)[1])
[(1, 12), (1, 42), (-1, -1)]

说明
邮编https://docs.python.org/3/library/functions.html#zip

>>> x=[1,2,3]
>>> y=['a','b','c']
>>> z=['first','second','third']
>>> zip(x,y,z)
[(1, 'a', 'first'), (2, 'b', 'second'), (3, 'c', 'third')]

现在假设x,y,z是A中的行。按zip(行)返回第一个元素、第二个元素、第三个元素等。。。通过返回我们经过的行的列。 注意:zip对传入的多个参数起作用,因此我们需要单独发送x、y、z等多个行,而不像[x,y,z]那样以列表的形式发送。这是由*A完成的,它分隔行并传递给zip。在

现在我们有了不同的专栏

最大值https://docs.python.org/3/library/functions.html#max

max(1,2)                      #Will return 2
max(cars,lambda x:x.speed)    #Will give you the fastest car
max(cars,lambda x:x.capacity) #Will give you the biggest passenger car
max(tups,lambda x:x[1])       #Will give you the tuple with biggest 2nd element

列表理解https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

A=[1,2,3]
[x**2 for x in A]     #Will give you [1,4,9]
[x**3 for x in A]     #Will give you [1,8,27]

最后

[max(a,key=lambda x:x[1]) for a in zip(*A)]

会给你每列的最大值!在

A是元组的列表。basicpython无法识别多元素订阅,尽管Numpy和类似的模块扩展了它。因此,您的下标表达式:,2被解释为一个元组,它的第一个元素是一个lice,第二个元素是一个整数,这(如消息所解释的)不能作为列表索引接受。在

不幸的是,“在第二个元素中包含最大值的元组,按列排列”并不能很好地描述实际的期望结果。在

我想你想要的答案是[(1, 52), (1, 42), (1, 42)]。在

实现这一点的一个相对简单的方法是分别对每个子列表进行排序,取每个子列表的最后一个元素。这可以拼写为

result = [sorted(x, key=lambda z: z[1])[-1] for x in A]

sorted函数的key参数确保每个列表按其第二个元素排序,即 [-1]下标取已排序列表的最后一个(因此也是最高的)元素,for x in A确保输出的每个元素对应于输入的元素(,一个三元组的列表)。在

相关问题 更多 >