Python:如何用另一个列表索引一个列表,然后用另一个列表再次索引?

时间:2020-07-31 09:12:31

标签: python

我想用另一个列表索引一个用空格分隔的数字列表,然后用另一个列表再次索引它。

z = ['1 2 3 4 5', '6 7 8 9 10', '11 12 13 14 15','16 17 18 19 20']
x = [2,3,4]
y = [3,2,1]
i = []
k = []

这是我的尝试:

for a in y:
    i.append(z[a])
for b in i:
    j = b.split(" ")
    for c in x:
        k.append(j[c])

我希望结果为[18,14,10]而不是['18','18','18','13','13','13','8','8 ','8']

4 个答案:

答案 0 :(得分:3)

列表理解是一种简洁的方法,将x和y压缩意味着您不需要中间对象,后者是列表的列表,因此伸缩性很差。

[z[j].split(" ")[i] for i, j in zip(x,y)]

答案 1 :(得分:1)

您可以使用zip()函数同时遍历两个可迭代对象,并使用两个索引将值直接附加到k列表。无需使用中间i-list。

z = ['1 2 3 4 5', '6 7 8 9 10', '11 12 13 14 15','16 17 18 19 20']
x = [2,3,4]
y = [3,2,1]
i = []
k = []

for a,b in zip(y,x):
    j = z[a].split(' ')
    k.append(j[b])

这将导致k==['18', '14', '10']

答案 2 :(得分:0)

您第二次迭代两次,这将提取以空格分隔的列表的所有三个索引。而是尝试以下方法:

z = ['1 2 3 4 5', '6 7 8 9 10', '11 12 13 14 15','16 17 18 19 20']
x = [2,3,4]
y = [3,2,1]
i = []
k = []
for a in y:
    i.append(z[a])
for e,b in enumerate(i):
    j = b.split(" ")
    k.append(j[x[e]])
k
>>['18', '14', '10']

在这里,我正在枚举以跟踪迭代并从提供的列表中切片相应的索引。

答案 3 :(得分:0)

我想这就是你想做的

z = ['1 2 3 4 5', '6 7 8 9 10', '11 12 13 14 15','16 17 18 19 20']
x = [2,3,4]
y = [3,2,1]
i = []
k = []

for a in y:
    i.append(z[a])
print(i)
for (b,c) in zip(i,x):
    j = b.split(" ")
    k.append(j[c])
print(k)

输出['18', '14', '10']

相关问题