Python中的多个'for'循环列表

问题描述 投票:0回答:3

这是我尝试过的代码:

booksa = [book[i] for book in books for k in range(len(lista)) for i in lista[k][0] ]
booksb = [book[j] for book in books for e in range(len(lista)) for j in lista[e][1] ]

嗨,我不熟悉列表中的循环 - 列表理解。我有一个名为'books'的列表,以及一个名为'lista'的列表。我想找到books中每个元组的第二个元素,其中lista作为索引,并将相应的对存储在列表booksabooksb中。

books = [(17,5), (3,55), (5,12), (14,9), (16,1), (9,5), (5,6), (18,13), (19,7), (1,20), (4,12), (11,1), (8,6), (8,18), (3,4), (13,7), (17,22), (20,7)]
lista = [[(0,9), (3,10), (6,15)]]

例如,对于(0,9)中的lista,我们回顾books并找到17中的(17,5)(0表示第一个元组),然后将17放入booksa7(9表示第8个元组)放入(9,5)放入booksb

如何在列表中执行一些“for”循环?

python for-loop arraylist nested-loops
3个回答
2
投票

应用的逻辑如下:

  • 选择lista元组元素中的第一个项目并使用它来索引到books列表并获取第一个元组存在那里添加到booksa
  • 选择lista元组元素中的第二项并使用它来索引到books列表并获取第二项元组存在那里添加到booksb

检查以下代码:

books = [(17,5), (3,55), (5,12), (14,9), (16,1), (9,5), (5,6), (18,13), (19,7), (1,20), (4,12), (11,1), (8,6), (8,18), (3,4), (13,7), (17,22), (20,7)]
lista = [[(0,9), (3,10), (6,15)]]

booksa = []
booksb = []
for x in lista:
   for y in x:
       booksa.append(books[y[0]][0])
       booksb.append(books[y[1]][1])

print ("booksa = %s" %(booksa))
print ("booksb = %s" %(booksb))

输出:

booksa = [17, 14, 5]
booksb = [20, 12, 7]

1
投票

使用列表理解

books = [(17,5), (3,55), (5,12), (14,9), (16,1), (9,5), (5,6), (18,13), (19,7), (1,20), (4,12), (11,1), (8,6), (8,18), (3,4), (13,7), (17,22), (20,7)]
lista = [[(0,9), (3,10), (6,15)]]

booksa = [books[k[0]][0] for j in lista for k in j]
booksb = [books[k[1]][1] for j in lista for k in j]

"""
# output 
booksa = [17, 14, 5]
booksb = [20, 12, 7]
"""

0
投票

您可以使用元组解压缩来提高可读性:

booksa = [books[i][0] for i, _ in lista[0]]
# [17, 14, 5]

booksb = [books[j][1] for _, j in lista[0]]
# [20, 12, 7]

如果你在lista有多个子列表,请使用itertools.chain(lista)而不是lista[0]

© www.soinside.com 2019 - 2024. All rights reserved.