Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多重';对于';Python中的循环列表_Python_For Loop_Arraylist_Nested Loops - Fatal编程技术网

多重';对于';Python中的循环列表

多重';对于';Python中的循环列表,python,for-loop,arraylist,nested-loops,Python,For Loop,Arraylist,Nested Loops,以下是我尝试过的代码: 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中每个元组的第二

以下是我尝试过的代码:

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
作为索引,并将相应的对存储在列表
booksa
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)]]
例如,对于
列表A
中的
(0,9)
,我们回顾
书籍
,在
(17,5)
中找到
17
(0表示第一个元组),然后将
17
放入
书籍A
,并将
7
(9表示第八个元组)放入
(9,5)
书籍B


如何在带有一些“for”循环的列表中执行此操作?

应用的逻辑如下所示:

  • 选择
    lista
    tuple元素中的第一项,并使用该项索引到
    books
    列表中,并获取要添加到
    booksa
  • lista
    tuple元素中选择第二项,并使用该项将其索引到
    books
    列表中,然后获取要添加到
    booksb的第二项tuple
检查以下代码:

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]

使用列表理解

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]
"""

可以使用元组解包来提高可读性:

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]
“9表示第八个元组”-这不清楚。在这种情况下,0表示哪个元组?0和1是否表示相同的元组?