Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何仅从列表的每个项目中获取第一个元素_Python - Fatal编程技术网

Python 如何仅从列表的每个项目中获取第一个元素

Python 如何仅从列表的每个项目中获取第一个元素,python,Python,我必须列出下列各项: [[(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,用列来表示。

我必须列出下列各项:

[[(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,用列来表示。 首先,我想取第一列的max和min,然后取第二列的max和min

在matlab中,我们可以执行以下操作:

max(list(:,1));
min(list(:,1));
max(list(:,2));
min(list(:,2)));
有没有一种方法可以在python中做到这一点而不感到头痛

谢谢大家!

max([x[0][0] for x in list])
min([x[0][0] for x in list])
这将取第一列的最大值和最小值。类似地,对于第二列,可以执行以下操作:

max([x[0][1] for x in list])
min([x[0][1] for x in list])
这是一个元组列表(长度为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()

数以吨计的操作得到支持。

正如其他答案所指出的,从根本上说,您的任务没有使用良好的数据结构。如果您想在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]
在上面的列表理解中,我只是在列表上迭代,然后在包装元组的(长度为1)列表上迭代,然后从元组中切片我想要的列(
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
>>>
顺便说一句,使用Python 3.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
>>>

当然,有一些纯Python的方法可以做到这一点,但是如果你在做类似matlab的操作,你可能会想试试numpy?比如这里:
[(640,92,0.80969274,0)]
你肯定想在这里输入Numpy顺便说一下:查看编辑re:f-strings。如果你在Python 3.6上,你应该考虑使用它们。