【问题标题】:Iterating several lists item by item with Python使用 Python 逐项迭代多个列表
【发布时间】:2022-01-20 14:47:30
【问题描述】:

使用 Python,假设我有三个这样的列表:

list1 = ["ABC","JKL","STU"]
list2 = ["DEF", "MNO", "VWX"]
list3 = ["GHI", "PQR", "YZ0"]

我想循环列表,结果是这样的列表:

result = ["ABC", "DEF", "GHI", "JKL", "MNO", "PQR", "STU", "VWX", "YZ0"]

我可以通过一个简单的 for 循环使其工作:

result = []

for i in range(3):
    result.append(list1[i])
    result.append(list2[i])
    result.append(list3[i])

因为我想使用这种方法的项目包括比三个更多的列表,所以我想使用更复杂的方法。我尝试使用itertools.chain() 函数,但它在移动到下一个之前分别循环每个列表:

result = []

for i in itertools.chain(list1, list2, list3):
    result.append(i)

有没有办法让itertools.chain() 或其他一些功能一起工作?

【问题讨论】:

  • sum(zip(list1, list2, list3), tuple())。大家好,我刚刚发布了这个作为可能的“黑客”的演示。这并不意味着它是一个好的解决方案。实现这一点的正确方法是list(chain.from_iterable(zip(list1, list2, list3)))
  • 或者使用嵌套列表理解:[i for t in zip(list1, list2, list3) for i in t]
  • @Kolumbo 您能否检查一下result 的预期输出中是否有错字,第一个“JKL”可能不需要在那里。 (目前结果列表中有 10 个项目,但应该只有 9 个)。
  • Google 是您寻找答案的朋友 - thispointer.com/python-how-to-merge-two-or-more-lists
  • 我不确定为什么这个问题会被如此严重地否决和关闭。这个问题不是很清楚,提问的人显然已经尝试过itertools.chain()

标签: python list itertools


【解决方案1】:

使用numpy.hstack

import numpy as np

list1 = ["ABC","JKL","STU"]
list2 = ["DEF", "MNO", "VWX"]
list3 = ["GHI", "PQR", "YZ0"]

np.hstack([list1, list2, list3]) 
# -> array(['ABC', 'JKL', 'STU', 'DEF', 'MNO', 'VWX', 'GHI', 'PQR', 'YZ0'], dtype='<U3')

【讨论】:

    【解决方案2】:

    你可以试试

    result = sum((list(e) for e in zip(list1, list2, list3)), [])
    

    不是最漂亮的方式。还在玩。问题是, zip 返回元组,它们不能直接总结。因此,额外的生成器将e从元组转换为列表。

    【讨论】:

    • 好吧,其他人打了我一拳,更好地解决了我的问题 :)
    猜你喜欢
    • 1970-01-01
    • 2020-10-20
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2012-04-05
    • 2014-01-13
    • 2021-12-11
    相关资源
    最近更新 更多