【问题标题】:Multiple 'for' loop in list in PythonPython中列表中的多个'for'循环
【发布时间】:2019-08-04 22:31:26
【问题描述】:

这是我尝试过的代码:

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

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

如何使用一些“for”循环在列表中执行此操作?

【问题讨论】:

  • “9 表示第八个元组” - 这不清楚。在那种情况下,0 表示哪个元组? 0和1代表同一个元组吗?

标签: python for-loop arraylist nested-loops


【解决方案1】:

应用的逻辑如下:

  • 选择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]

【讨论】:

    【解决方案2】:

    使用列表理解

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

    【讨论】:

      【解决方案3】:

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

      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]

      【讨论】:

        猜你喜欢
        • 2014-02-22
        • 2018-10-28
        • 2020-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-07
        • 1970-01-01
        相关资源
        最近更新 更多