作为更大项目的最后一部分,这是我要解决的问题:
我有一个列表列表,我需要根据第二个列表的值精确提取一个元素。
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]
答案 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)