【问题标题】:search the biggest number of one column in a list of list [duplicate]在列表列表中搜索最大的一列[重复]
【发布时间】:2013-01-30 19:25:30
【问题描述】:

我有一个列表,list = [(1,2,5), (2,8,7),(3,6,9)],我想找到第三列的最大数字,所以我尝试了:

zipped = zip(*list)
print max(zipped[2])

但它没有显示最大的数字。有人知道原因和解决方案吗?

【问题讨论】:

  • 它显示的是什么?
  • 这是一个要明确的元组列表...并且不要将您的列表命名为list,否则当您输入list((1,2,3))时会感到困惑
  • 唯一不起作用的机会是你在 Py3k 上并且 zip 是一个迭代器。
  • 你不能改变这样的问题。创建另一个
  • @trivial -- 我回滚了你的编辑。不要这样改变问题。如果您有新问题,请提出新问题(但请先进行一些研究:)

标签: python list max


【解决方案1】:

适用于所有较新的 Python:

>>> li = [(1,2,5), (2,8,7),(3,6,9)]
>>> max(l[2] for l in li)
9

如果你有文字:

>>> li = [('1','2','5'), ('2','8','7'),('3','6','9')]
>>> max(int(l[2]) for l in li)
9

即使源是迭代器/生成器也可以工作。这是在 Py3.3 上,其中 zip 返回一个迭代器:

>>> gli=(e for e in li)
>>> max(int(l[2]) for l in gli)
9
>>> max(int(l[2]) for l in zip(*li))
9

【讨论】:

  • 哇...我不知道为什么我不这样写...(+1)...我可以安慰自己,它很好地允许 OP 获得完整的元组最大的第 3 项……但如果您只需要该项,这绝对更干净。
  • 感谢您的帮助,它有效。
【解决方案2】:

在 python2.7 上为我工作。

>>> l = [(1,2,5),(2,8,7),(3,6,9)]
>>> zip(*l)
[(1, 2, 3), (2, 8, 6), (5, 7, 9)]
>>> max(zip(*l)[2])
9

另一种选择:

max(l,key=lambda x:x[2])[2]

或者如果你喜欢itemgetter:

from operator import itemgetter
max(l,key=itemgetter(2))[2]

这在内存方面可能更有效,它可以在 zip 不再返回 list 的 python3.x 上工作。

这里的关键是它允许您获取最大的完整元组(最大的由第三个元素决定),然后您只需从那里拉出正确的元素即可。

【讨论】:

  • 也许 OP 使用 Py3k 和 zip 返回一个迭代器
  • @JBernardo -- 是的。我也是这么想的……这就是为什么我补充说我的第二个版本也可以在 python3.x 上运行。
  • 对不起,我找到了原因,我的列表是文本列表,我给出的示例是数字列表...请告诉我如何更改它?
  • @trivial -- map(int,iterable_of_string) 将返回一个将字符串转换为整数的新列表(如果可能)
猜你喜欢
  • 2019-05-25
  • 1970-01-01
  • 2023-03-30
  • 2021-02-24
  • 2021-01-01
  • 2012-05-22
  • 2014-04-21
  • 2018-04-13
  • 1970-01-01
相关资源
最近更新 更多