2024-04-26 04:16:20 发布
网友
我这里有一个元组列表
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:
期望输出:
你可以试试这个:
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)]
输出:
[max(a,key=lambda x:x[1]) for a in zip(*A)]
让我知道如果这对你有用,我会解释答案。在
您可以访问这样的列。。在
>>> 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。在
A
现在我们有了不同的专栏
最大值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]
最后
会给你每列的最大值!在
A是元组的列表。basicpython无法识别多元素订阅,尽管Numpy和类似的模块扩展了它。因此,您的下标表达式:,2被解释为一个元组,它的第一个元素是一个lice,第二个元素是一个整数,这(如消息所解释的)不能作为列表索引接受。在
:,2
不幸的是,“在第二个元素中包含最大值的元组,按列排列”并不能很好地描述实际的期望结果。在
我想你想要的答案是[(1, 52), (1, 42), (1, 42)]。在
[(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确保输出的每个元素对应于输入的元素(即,一个三元组的列表)。在
sorted
key
[-1]
for x in A
你可以试试这个:
输出:
^{pr2}$输出:
^{pr2}$让我知道如果这对你有用,我会解释答案。在
您可以访问这样的列。。在
说明
邮编https://docs.python.org/3/library/functions.html#zip
现在假设x,y,z是
A
中的行。按zip(行)返回第一个元素、第二个元素、第三个元素等。。。通过返回我们经过的行的列。 注意:zip对传入的多个参数起作用,因此我们需要单独发送x、y、z等多个行,而不像[x,y,z]那样以列表的形式发送。这是由*A完成的,它分隔行并传递给zip。在现在我们有了不同的专栏
最大值https://docs.python.org/3/library/functions.html#max
列表理解https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
最后
会给你每列的最大值!在
A
是元组的列表。basicpython无法识别多元素订阅,尽管Numpy和类似的模块扩展了它。因此,您的下标表达式:,2
被解释为一个元组,它的第一个元素是一个lice,第二个元素是一个整数,这(如消息所解释的)不能作为列表索引接受。在不幸的是,“在第二个元素中包含最大值的元组,按列排列”并不能很好地描述实际的期望结果。在
我想你想要的答案是
[(1, 52), (1, 42), (1, 42)]
。在实现这一点的一个相对简单的方法是分别对每个子列表进行排序,取每个子列表的最后一个元素。这可以拼写为
sorted
函数的key
参数确保每个列表按其第二个元素排序,即[-1]
下标取已排序列表的最后一个(因此也是最高的)元素,for x in A
确保输出的每个元素对应于输入的元素(即,一个三元组的列表)。在相关问题 更多 >
编程相关推荐