2013-04-14 78 views
-1

任何人都可以解释发生了什么 当我运行下面的python片段?奇怪的python嵌套for循环行为

import itertools 

def prob(): 
    testlists = itertools.combinations([1,2,3,4,5,6,7,8,9,0],4) 
    for itervalue in range(5,50): 
     for tlist in testlists: 
      print itervalue 

我的预期行为将是从5至50 itervalue的每个值要被打印在屏幕上多次(一次用于每个testlists列表)。例如,如果我将测试列表定义为,就会发生这种情况。

testlists = [[1,2,3],[5,2,1],[3,2,9]] 

实际情况是,只有第一个itervalue被打印输出(5个打印出来数百次)。 EX:

5 
5 
5 
#and so on 

这里究竟发生了什么?一般来说,我是Python和动态语言的新手。谢谢你的帮助。

我在运行python 2.6.6和2.7.3的计算机上测试了这个。

+1

也许你应该不是打印'tlist'。看看你的循环 – jamylak

+0

你有错误的方式循环。 – Volatility

+0

不,这是故意的行为。我的实际问题更大,我需要访问itervalue。事实上,itervalue在嵌套循环内不会增加,这让我感到困惑。虽然谢谢! – vancan1ty

回答

1

那么, 问题是,你的测试列表只能循环一次,因为它不是一个列表/元组,而是一个生成器。因此你的内部循环只运行一次。

更改您的代码为:

import itertools 

def prob(): 
    testlists = list(itertools.combinations([1,2,3,4,5,6,7,8,9,0],4)) 
    for itervalue in range(5,50): 
     for tlist in testlists: 
      print itervalue 
+0

@ vancan1ty问题是你的* testlists *是一个生成器,但不是一个列表。检查我更新的答案。这个问题真的很好:-) –

+0

好的,谢谢Maksym,这很有意义^。还没有使用过很多发电机 - 下一次会知道该找什么。 – vancan1ty