我想用另一个列表索引一个用空格分隔的数字列表,然后用另一个列表再次索引它。
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']
答案 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']