Python列表对2D数组的理解

时间:2015-04-15 00:11:08

标签: python list list-comprehension

如果我有2D数组:

 [['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 
 'XXXXX', 'XX', 'XXX', '0.05', 'XXXX'], ...]

我只想提取第一个元素和第八个元素。我怎样才能使用列表理解来做到这一点?还是过滤功能?

需要才能使用列表理解。

6 个答案:

答案 0 :(得分:3)

听起来你想要列表列表的每个子列表中的第一个和第八个元素。如果必须使用列表推导,则可以使用enumerate

data = [['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 
         'XXXXX', 'XX', 'XXX', '0.05', 'XXXX'], ...]

indices = [0, 7]

[[x for i, x in enumerate(sublist) if i in indices] for sublist in data]

这就是说其他一个答案,它使用理解来遍历索引而不是整个子列表,效率更高。

值得注意的是,您还可以使用numpy来执行此类索引:

import numpy as np
data_arr = np.array(data)
data_arr[:, indices]

答案 1 :(得分:3)

你可以步:

l = [['Wolfe Lane Community Garden', 'X', 'XXX', 'XX',
'XXXXX', 'XX', 'XXX', '0.05', 'XXXX']]

print([sub[::7] for sub in l])
[['Wolfe Lane Community Garden', '0.05']]

使用comp获取列表列表:

print([[sub[x]for x in (0,7)] for sub in l ])


[['Wolfe Lane Community Garden', '0.05']]

没有循环的索引:

print([[sub[0], sub[7]] for sub in l ])

[['Wolfe Lane Community Garden', '0.05']]

或者使用comp和flat list:

print([sub[x] for sub in l for x in (0,7) ])
['Wolfe Lane Community Garden', '0.05']

您使用的内容取决于您是想要平面列表还是列表列表。

如果您想要一种有效的方法来展平使用itertools.chain

from itertools import chain

print(list(chain.from_iterable((sub[0],sub[7]) for sub in l)))

你实际上可以制作一个列表comp:

print([ele for ele in chain.from_iterable((sub[0],sub[7]) for sub in l)])

答案 2 :(得分:1)

为什么不呢:

myarray = ['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 
           'XXXXX', 'XX', 'XXX', '0.05', 'XXXX']
first = myarray[0]
seventh = myarray[6]

变量名后面的括号表示正在访问的数组的元素。

答案 3 :(得分:1)

为什么你不能只根据索引获取项目?这是最简单的方法,特别是因为你知道你需要得到什么物品。

答案 4 :(得分:0)

最好的方法是将operator.itemgetter()map()一起使用。

from operator import itemgetter

data = [['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 'XXXXX', 'XX', 'XXX', '0.05', 'XXXX']]

print map(itemgetter(0, 7), data)
# OUT: [('Wolfe Lane Community Garden', '0.05')]

答案 5 :(得分:0)

代码:

lst = [['Wolfe Lane Community Garden', 'X', 'XXX', 'XX', 'XXXXX', 'XX', 'XXX', '0.05', 'XXXX'], ...]

使用map功能:

print map(lambda x: [x[0], x[6]], lst)

使用list理解:

print [[x[0], x[6]] for x in lst]