【问题标题】:How to loop through two lists with different lengths simultaneously in Python如何在Python中同时遍历两个不同长度的列表
【发布时间】:2020-01-19 22:16:29
【问题描述】:

我使用 Python。我创建了两个不同长度的列表:

list_1 = [1, 2, 3, 4, 5];
list_2 = ['a', 'b', 'c'];

我想打印成对的数字和字母为

"1a 2b 3c 4a 5b 1c 2a 3b 4c 5a 1b 2c 3a 4b 5c"`

同时循环遍历两个列表。

下面的嵌套for循环将pair打印为

"1a 1b 1c 2a 2b 2c 3a 3b 3c 4a 4b 4c 5a 5b 5c"`

这不是我想要的:

for num in list_1:
    for letter in list_2:
        print(num, letter)

【问题讨论】:

    标签: python-3.x for-loop


    【解决方案1】:

    这是使用zipitertools.cycle 的解决方案:

    >>> a = [1, 2, 3, 4, 5]
    >>> b = ['a', 'b', 'c']
    >>> from itertools import cycle
    >>> for _, x, y in zip(range(len(a) * len(b)), cycle(a), cycle(b)):
    ...     print(x, y)
    ... 
    1 a
    2 b
    3 c
    4 a
    5 b
    1 c
    2 a
    3 b
    4 c
    5 a
    1 b
    2 c
    3 a
    4 b
    5 c
    

    或者,使用itertools.islice 代替range

    from itertools import cycle, islice
    
    for x, y in islice(zip(cycle(a), cycle(b)), len(a) * len(b)):
        print(x, y)
    

    【讨论】:

      【解决方案2】:
      >>> a = [1, 2, 3, 4, 5]
      >>> b = ['a', 'b', 'c']
      >>> for x, y in zip(a * len(b), b * len(a)):
              print(x, y)
      
      
      1 a
      2 b
      3 c
      4 a
      5 b
      1 c
      2 a
      3 b
      4 c
      5 a
      1 b
      2 c
      3 a
      4 b
      5 c
      
      

      【讨论】:

      • 见“Explaining entirely code-based answers”。虽然这在技术上可能是正确的,但它并没有解释为什么它可以解决问题或应该是选择的答案。除了帮助解决问题,我们还应该进行教育。
      • @theTinMan 除非被要求,否则我不会解释一些显而易见的事情。你为什么不以同样的方式抱怨另一个答案?它也没有解释任何东西,而且同样“复杂”(如果不是更多的话)。
      • 链接中的评论有助于解释它,就像同一主题的许多其他元问题一样。有据可查的答案往往会获得更多支持,但这取决于您。
      • @theTinMan 嗯,我的新评论是怎么被删除的?是你吗?
      • 必须是版主,因为他们是唯一拥有该权限的人。
      猜你喜欢
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 2011-08-03
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多