【问题标题】:How to extract the n-th elements equal to a value from a list of tuples in python如何从python中的元组列表中提取等于值的第n个元素
【发布时间】:2018-05-15 14:49:49
【问题描述】:

我正在尝试从python中等于某个值的元组列表中获取第n个元素

我有一个更大的类似这样的列表

num = [('A15', 2, 'BC', 721.16), ('A21', 3, 'AB', 631.31), ('A42', 4, 'EE', 245.43)]

我希望只提取元组的第 2 个元素等于给定值的元组,即本例中的 2,并从中找到最大的第 4 个元素

目前我的代码如下所示

for ((x[1] for x in num) = 1):
    num_max = max(num_list,key=lambda item:item[3])

问题与将列表理解设置为一个值有关,因为这就是给我一个语法错误的原因

抱歉,如果已经回答但我找不到它

【问题讨论】:

  • 这不是python中有效的for循环
  • max([i for i in num if i[1] == 2], key=lambda x: x[3])
  • max([i for i in x if i[1] == 2], key=lambda x: x[3])[3] 如果你只想要元素
  • 更重要的是,for ((x[1] for x in num) = 1): 应该做什么?

标签: python list tuples max


【解决方案1】:

这样试试,

In [1]: num = [('A15', 2, 'BC', 721.16), ('A21', 3, 'AB', 631.31), 
               ('A42', 4, 'EE', 245.43),('A15', 2, 'BC', 856.16)]
In [2]: max((i for i in num if i[1] == 2),key=lambda  x:x[3])
Out[2]: ('A15', 2, 'BC', 856.16)

【讨论】:

  • 为什么要投反对票?描述原因真是太好了。 :)
  • 我的支持。我要更改的主要内容是使用生成器表达式而不是构建列表,即将方括号替换为常规方括号。
【解决方案2】:

您有多种选择,例如使用filtermax

result =  max(filter(lambda x: x[1] == 2, num_list), key=lambda x: x[3])

正如@chrisz 评论的那样,但不要使用list,而是使用generator

result = max((i for i in x if i[1] == 2), key=lambda x: x[3])

注意:如果使用 python2,请考虑使用 itertools.ifilter 而不是 filter 以避免额外的内存。

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 2020-09-29
    • 2018-04-17
    • 2020-09-15
    • 2018-02-07
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多