【发布时间】:2013-07-15 08:03:46
【问题描述】:
我有一个简单的生成器,可以给我一组坐标的排列。 我希望使用以下代码将每个新排列保存到数组中的一个元素:
import random
def poss_comb(coord):
spin=random.shuffle
if spin:
spin(coord)
yield (coord)
...
a=[]
for n in xrange(0,10):
for item in poss_comb(coord):
print item
a.append(item)
但是,当打印结果时,打印 item 给了我我想要的:
['0 1', '', '1 2', '1 3']
['0 1', '', '1 2', '1 3']
['1 2', '0 1', '1 3', '']
['0 1', '1 2', '', '1 3']
['1 3', '', '1 2', '0 1']
['1 3', '1 2', '0 1', '']
['0 1', '', '1 3', '1 2']
['1 2', '0 1', '', '1 3']
['1 2', '1 3', '', '0 1']
['', '1 2', '1 3', '0 1']
而打印list a 提供了一个数组,其中每个元素都是最后一个排列的副本。
有什么更好的方法来做到这一点?
【问题讨论】:
-
你的函数是产生全局的
coord还是局部的link? -
它们是相同的,为简单起见,我在发布时将链接更改为坐标。 (现已更正)
-
coord到底是什么?它没有在任何地方定义。 -
你是一个简单的生成器
poss_comb()只产生一个值。 -
值得注意的是,有一种更简单的方法可以将生成器中的每个产生的值附加到列表中:
a = list(poss_comb(coord))(或a.extend(poss_comb(coord)),如果您想将它们附加到现有列表而不是新的)。
标签: python list iteration generator permutation