根据第二个列表中值的索引位置从嵌套列表中获取单个元素

时间:2018-10-16 06:45:12

标签: python python-3.x

作为更大项目的最后一部分,这是我要解决的问题:

我有一个列表列表,我需要根据第二个列表的值精确提取一个元素。

a = [[6,2,3,9], [10,19,14,11], [27,28,21,24]]

b = [0,2,2]

b中的值指示元素在子列表中的位置。同样,b中的索引对于列表a中元素的索引为true。

我正在寻找的结果是:

c = [6, 14, 21]

我尝试了很多版本:

c = [i[j] for i in a for j in b]

但是结果是我得到了所有列表的所有元素的列表,如下所示:

c = [6, 3, 3, 10, 14, 14, 27, 21, 21]

4 个答案:

答案 0 :(得分:2)

通过使用嵌套循环,您将a中的 every 元素与b中的 every 元素组合在一起。您想要的是使用pic of my code成对迭代:

c = [x[y] for x, y in zip(a, b)]
# [6, 14, 21]

这大致相当于:

c = [a[i][b[i]] for i in range(min(len(a), len(b)))]

答案 1 :(得分:1)

或者:

[v[b[i]] for i,v in enumerate(a)]

示例:

>>> a = [[6,2,3,9], [10,19,14,11], [27,28,21,24]]
>>> b = [0,2,2]
>>> [v[b[i]] for i,v in enumerate(a)]
[6, 14, 21]
>>> 

答案 2 :(得分:-1)

尝试一下:

c = [a[i][b[i]] for i in xrange(len(b))]

答案 3 :(得分:-1)

您可以尝试以下操作。

a = [[6,2,3,9], [10,19,14,11], [27,28,21,24]]
b = [0,2,2]
c = []
for i in range(0, len(b)):
    c.append(a[i][b[i]])
print (c)