首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从列表的每个项中只获取第一个元素

如何从列表的每个项中只获取第一个元素
EN

Stack Overflow用户
提问于 2017-05-13 21:20:02
回答 3查看 71关注 0票数 2

我必须列出以下清单:

代码语言:javascript
复制
[[(640, 92, 0.80969274, 0)], [(524, 180, 0.58553714, 1)], [(494, 181, 0.64085102, 2)], [(477, 338, 0.67508131, 3)], [(554, 480, 0.64356369, 4)]]

我只对项目中的前两个元素感兴趣,例如:

代码语言:javascript
复制
640, 92
524, 180
494, 181

我可以让他们用

代码语言:javascript
复制
print list[1][0][0:2]

但我想做的是取最大值,按列表示。首先,我想取第一列的max和min,然后从第二列取max和min。

在matlab中,我们可以这样做:

代码语言:javascript
复制
max(list(:,1));
min(list(:,1));
max(list(:,2));
min(list(:,2)));

有没有办法在蟒蛇身上做到这一点而不让人头痛?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-13 21:39:10

正如其他答案所指出的那样,从根本上说,您没有在任务中使用良好的数据结构。如果您想在Python中使用类似于Matlab的功能,则需要使用numpy,并应该查看pandas。Python是一种通用的编程语言,因此它的序列类型(如list )并不能有效地完成与Matlab维数组(这是numpy提供给您的内容)相同的事情。但话虽如此,有一种相对无痛的方式来做你想做的事。如果您只使用一个元组列表,而不是使用长度为1的列表(每个列表包含一个实际保存数据的元组),它将变得更加无痛。但是,python使这种咀嚼变得非常无痛:

代码语言:javascript
复制
>>> x = [[(640, 92, 0.80969274, 0)], [(524, 180, 0.58553714, 1)], [(494, 181, 0.64085102, 2)], [(477, 338, 0.67508131, 3)], [(554, 480, 0.64356369, 4)]]
>>> extracted = [sub[0:2] for l in x for sub in l]

在上面的列表理解中,我只是遍历列表,然后迭代包装元组的(length one)列表,然后从tuple (sub)中分割我想要的列。

现在,要在vanilla python中执行“转置”,请将其解压缩到zip中。

代码语言:javascript
复制
>>> for col in zip(*extracted):
...     print("Max: {}".format(max(col)))
...     print("Min: {}".format(min(col)))
...
Max: 640
Min: 477
Max: 480
Min: 92
>>>

顺便说一句,使用Python3.6通过给我们f-字符串,使更加轻松地实现了

代码语言:javascript
复制
>>> for col in zip(*extracted):
...     print(f"Max: {max(col)}")
...     print(f"Min: {min(col)}")
...
Max: 640
Min: 477
Max: 480
Min: 92
>>>
票数 4
EN

Stack Overflow用户

发布于 2017-05-13 21:25:31

这是一个元组的列表(长度1),所以我们只需要做一些腿活。

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame([d[0] for d in data])
df[0].max()
df[1].max()
df[0].mean()
df[0].min()

大量的行动得到了支持。

票数 3
EN

Stack Overflow用户

发布于 2017-05-13 21:23:51

代码语言:javascript
复制
max([x[0][0] for x in list])
min([x[0][0] for x in list])

这需要max和min作为第一列。同样,对于第二列,您可以这样做:

代码语言:javascript
复制
max([x[0][1] for x in list])
min([x[0][1] for x in list])
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43958093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档