2016-08-08 71 views
0

我有一个程序生成两个列表。我想从列表1中打印一个项目,然后切换到打印列表2中的项目,然后返回到从列表1打印等等。然而,每当我尝试它,它只是打印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 
+0

这两个列表将始终是相同的大小? –

+0

[可能同时打印多个列表中的所有值]的可能副本(http://stackoverflow.com/questions/12040989/printing-all-the-values-from-multiple-lists-at-the-same-时间) –

+0

请注意,'continue'是一个关键字,因为这个代码甚至不会在Python 2.7上运行(它可能在不同的版本上)。我建议不要将它用作变量名称。 –

回答

2

我的答案是围绕你的问题的代码。如果这是你想要的格式,然后使用我的答案。否则,其他答案更像Pythonic所述。

请注意,我已经改名为“继续”“开关”为继续是一个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 = Falsewhile switch == False:

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

1

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 
6

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,他们在询问他们解决问题的办法,而不是问这个问题本身。退一步问问你的方法是否是最好的方法总是好的,如果你遇到问题,还有什么其他的方法可能。看起来你正在考虑将你的问题看作是在两个列表之间来回跳动的问题,这导致你想到两个循环,每个列表一个循环。但更好的解决方案涉及一个同时跟踪两个列表的单一循环。

+2

另外,如果你有一个列表比另一个长,你可以使用['izip_longest'](https://docs.python.org/2.7/library/itertools.html#itertools.izip_longest)来迭代剩下的项目,如果它们的值是'None',则过滤掉'x'或'y'。 –