【问题标题】:How to switch between loops?如何在循环之间切换?
【发布时间】:2016-12-14 14:33:49
【问题描述】:

我有一个生成两个列表的程序。我想从 list1 打印一个项目,然后切换到从 list 2 打印一个项目,然后从 list1 ..等返回打印。但是,每当我尝试它时,它只会打印 list1 然后是 list2。

请帮忙。

代码:

List1 = ['a', 'b' , 'c', 'd', 'e', 'f']

List2 = ['1', '2', '3', '4', '5', '6']

continue = True

while continue == True:
    for i in List1:
        print i
        print '/n'
        continue = False

while continue == False:
     for i in List2:
          print i
          print '/n'
          continue = True

输出:

a
b
c
d
e
f
1
2
3
4
5
6

期望的输出:

a
1
b
2
c
3
d
4
e
5
f
6

【问题讨论】:

标签: python list for-loop while-loop


【解决方案1】:

Python 的内置zip function 提供了一种非常简洁的方式来实现该目标。

for x,y in zip(List1,List2):
    print(x)
    print(y)

# Out:
a
1
b
2
c
3
d
4
e
5
f
6

这是一个更加 Pythonic 的解决方案。您不需要两个不同的循环,您需要一个按您想要的顺序打印它们的循环。 “zip”函数会将列表成对,然后随着循环的进行将每一对放入 x,y 中。因此,您将能够在列表的每次迭代中从每个列表中打印一个值。

有时在提问时,人们可以使用xy problem,在其中询问他们对问题的解决方案,而不是询问问题本身。退后一步询问您的方法是否看起来是最好的总是好的,如果您遇到问题,还有哪些其他方法可能。似乎您将问题视为在两个列表之间来回跳转的问题,这导致您想到了两个循环,每个列表一个循环。但更好的解决方案涉及同时跟踪两个列表的单个循环。

【讨论】:

  • 另外,如果你有一个比另一个长的列表,你可以使用izip_longest 来继续遍历剩余的项目,如果他们的列表过滤掉xy值为None
【解决方案2】:

我的回答是基于您问题的代码。如果这是您想要的格式,请使用我的答案。否则,如所述,其他答案更像 Pythonic。

请注意,我已将“continue”重命名为“switch”,因为 continue 是 Python 的保留字,会产生语法错误。

List1 = ['a', 'b' , 'c', 'd', 'e', 'f']

List2 = ['1', '2', '3', '4', '5', '6']

switch = True
while True:
    while switch == True:
        for i in List1:
            print(i)
            List1.pop(0)
            switch = False
            break

    while switch == False:
        for i in List2:
            print(i)
            List2.pop(0)
            switch = True
            break

如果您设置变量switch 的状态然后中断循环,它将完全按照您的意愿执行。

由于这个循环中断,我 .pop() 第 0 个索引值确保接收到正确的输出。

这段代码效率很低,我相信你可以找到其他方法来产生你想要的输出。

编辑:要使用不相等的列表长度执行此操作,您必须在while switch == True: 循环的末尾添加switch = False,反之亦然while switch == False:

编辑 2:这也为您提供了在循环之间切换的解决方案 :)

【讨论】:

    【解决方案3】:

    continue = False 不会阻止 for 循环运行直至完成。 while 条件仅在for 循环完成后进行评估。这会导致打印List1 的所有元素,然后打印List2 的所有元素。

    有很多方法可以遍历两个列表

    # One option
    for k in range(len(List1)):
        print List1[k]
        print List2[k]
    
    # Another option
    for a, b in zip(List1, List2);
        print a
        print b
    

    【讨论】:

      猜你喜欢
      • 2018-11-20
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      相关资源
      最近更新 更多