从Python的多维列表中获取项目

4

I have a list with the following appearance:

 [0] = [ [0.0, 100.0], [0.1, 93.08], [0.3, 92.85], [0.5, 92.62], [0.7, 91.12], [0.9, 90.89] ]

 [1] = [ [0.0, 100.0], [0.1, 2.79], [0.3, 2.62], [0.5, 2.21], [0.7, 1.83], [0.9, 1.83] ]

我希望获得向量以便按如下方式绘制信息:

[0.0, 0.1, 0.3, 0.5, 0.7, 0.9]
[100.0, 93.08, 92.85, 92.62, 91.12, 90.89]

同样适用于列表中的所有条目。

我尝试了类似以下的方法:

x = mylist[0][:][0]

有什么想法吗?我感激你的帮助!

这只是Python还是NumPy? - user764357
只是Python。我本应该使用NumPy,但现在为时已晚。 - Slash
4个回答

8
使用 zip 函数:
>>> mylist = [
    [0.0, 100.0], [0.1, 93.08], [0.3, 92.85], [0.5, 92.62],
    [0.7, 91.12], [0.9, 90.89] ]
>>> a, b = zip(*mylist)
>>> a
(0.0, 0.1, 0.3, 0.5, 0.7, 0.9)
>>> b
(100.0, 93.08, 92.85, 92.62, 91.12, 90.89)

>>> list(a)
[0.0, 0.1, 0.3, 0.5, 0.7, 0.9]
>>> list(b)
[100.0, 93.08, 92.85, 92.62, 91.12, 90.89]

糟糕,我已经有了这个答案,还有一整个Devo的“当问题出现时,你必须压缩它”的笑话 :( - user764357
2
一行代码解决:a, b = map(list, zip(*data)) - Anton Protopopov

5

使用纯Python时,您应该使用列表推导式

data = [ [0.0, 100.0], [0.1, 93.08], [0.3, 92.85], [0.5, 92.62], [0.7, 91.12], [0.9, 90.89] ]
listx = [item[0] for item in data ]
listy = [item[1] for item in data ]

>>>listx
[0.0, 0.1, 0.3, 0.5, 0.7, 0.9]
>>>listy
[100.0, 93.08, 92.85, 92.62, 91.12, 90.89]

我认为它比zip更好,因为它更易于阅读,不需要强制转换元组。


1
numpy解决方案:
import numpy as np
data = [ [0.0, 100.0], [0.1, 93.08], [0.3, 92.85], [0.5, 92.62], [0.7, 91.12], [0.9, 90.89] ]
data_np = np.array(data)
a = data_np[:,0]
b = data_np[:,1]

In [126]: a
Out[126]: array([ 0. ,  0.1,  0.3,  0.5,  0.7,  0.9])

In [127]: b
Out[127]: array([ 100.  ,   93.08,   92.85,   92.62,   91.12,   90.89])

1
可以使用map

a = map(lambda x: x[0], your_list)
b = map(lambda x: x[1], your_list)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接