我必须列出以下清单:
[[(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)]]我只对项目中的前两个元素感兴趣,例如:
640, 92
524, 180
494, 181我可以让他们用
print list[1][0][0:2]但我想做的是取最大值,按列表示。首先,我想取第一列的max和min,然后从第二列取max和min。
在matlab中,我们可以这样做:
max(list(:,1));
min(list(:,1));
max(list(:,2));
min(list(:,2)));有没有办法在蟒蛇身上做到这一点而不让人头痛?
谢谢!
发布于 2017-05-13 21:39:10
正如其他答案所指出的那样,从根本上说,您没有在任务中使用良好的数据结构。如果您想在Python中使用类似于Matlab的功能,则需要使用numpy,并应该查看pandas。Python是一种通用的编程语言,因此它的序列类型(如list )并不能有效地完成与Matlab维数组(这是numpy提供给您的内容)相同的事情。但话虽如此,有一种相对无痛的方式来做你想做的事。如果您只使用一个元组列表,而不是使用长度为1的列表(每个列表包含一个实际保存数据的元组),它将变得更加无痛。但是,python使这种咀嚼变得非常无痛:
>>> 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中。
>>> 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-字符串,使更加轻松地实现了!
>>> for col in zip(*extracted):
... print(f"Max: {max(col)}")
... print(f"Min: {min(col)}")
...
Max: 640
Min: 477
Max: 480
Min: 92
>>>发布于 2017-05-13 21:25:31
这是一个元组的列表(长度1),所以我们只需要做一些腿活。
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()大量的行动得到了支持。
发布于 2017-05-13 21:23:51
max([x[0][0] for x in list])
min([x[0][0] for x in list])这需要max和min作为第一列。同样,对于第二列,您可以这样做:
max([x[0][1] for x in list])
min([x[0][1] for x in list])https://stackoverflow.com/questions/43958093
复制相似问题