List Python3.5循环,每次迭代生成一个新列表

List Python3.5循环,每次迭代生成一个新列表,list,loops,random,python-3.5,List,Loops,Random,Python 3.5,我试图编写一些代码(伪随机)生成一个包含7个数字的列表。我让它运行一次。我希望能够循环此代码以生成多个列表,我可以将其输出到txt文件(我不需要这方面的帮助,我可以轻松地处理I/o和文件:) 我现在正在使用这段代码(感谢Jason完成这段代码): 这给出了单值列表的输出,如: [21] [1] [54] [48] [4] [32] [15] etc. 我想要的输出是19个列表,全部包含7个随机整数: [1,4,17,23,45,51,3] [10,2,9,38,4,1,24] [15,42,

我试图编写一些代码(伪随机)生成一个包含7个数字的列表。我让它运行一次。我希望能够循环此代码以生成多个列表,我可以将其输出到txt文件(我不需要这方面的帮助,我可以轻松地处理I/o和文件:)

我现在正在使用这段代码(感谢Jason完成这段代码):

这给出了单值列表的输出,如:

[21]
[1]
[54]
[48]
[4]
[32]
[15]
etc.
我想要的输出是19个列表,全部包含7个随机整数:

[1,4,17,23,45,51,3] 
[10,2,9,38,4,1,24]
[15,42,35,54,43,28,14]
etc

如果我对问题的理解正确,目标是将一个函数重复19次。但是,此函数会在每次调用时缓慢地从列表中删除项目,使其无法运行超过问题中当前写入的池大小。我怀疑解决方案是这样的:

import random

def spinAndPrune():
    random.shuffle( pool )
    current_choice = random.choice( pool )
    pool.remove( current_choice )
    random.shuffle( pool )
    return current_choice
首先,我在函数调用的末尾添加了一个return命令。接下来,您可以复制原始池,以便可以根据需要多次重新运行它。此外,您还需要存储要保留的列表:

# create an original pool of values
original_pool = list( range( 1, 60 ) )

# initialize a variable that stores previous runs
pool_list = []

# repeat 19 times
for i in range( 19 ):

    # create a copy of the original pool to a temporary pool
    pool = original_pool.copy()

    # run seven times, storing the current choice in variable a
    a = [ spinAndPrune() for x in range( 7 ) ]

    # keep track of variable a in the pool_list
    pool_list.append( a )
    print( a )
请注意
.copy()
函数以复制列表。另外,使用
range()
可以轻松创建包含整数1-59的列表

如果需要提取特定列表,可以按照以下方式执行操作:

# print first list
print( pool_list[ 0 ] )

# print fifth list
print( pool_list[ 4 ] )

# print all the lists
print( pool_list )
import random

pool = list( range( 1, 60 ) )
pool_list = []

# sample 19 times and store to the pool_list
for i in range( 19 ):
    sample = random.sample( pool, 7 )
    pool_list.append( sample )
    print( sample )

在我的另一个回答中,我修改了原始问题中的代码。但是,如果只是提取X个值而不在集合/列表中重复,则可能最简单的方法是使用
random.sample()
函数。代码可以是这样的:

# print first list
print( pool_list[ 0 ] )

# print fifth list
print( pool_list[ 4 ] )

# print all the lists
print( pool_list )
import random

pool = list( range( 1, 60 ) )
pool_list = []

# sample 19 times and store to the pool_list
for i in range( 19 ):
    sample = random.sample( pool, 7 )
    pool_list.append( sample )
    print( sample )

您正在尝试创建19个子列表,每个子列表的长度为7(总共133个元素)。但每次迭代都会从池中删除一个元素(在开始时为59个元素),因此会出现错误。True。如果将范围更改为(2),代码将附加相同的列表,而不是生成一个包含7个数字的新列表。我想为每次传球创建一个新的列表,并重置池(现在您已经提到了!)您已经理解了,谢谢Jason。我真希望我能想到列表声明中的范围!我明白你的想法,但是这仍然会产生同样的错误。它也不会输出多个7的列表,它会继续附加输出列表,所以它>7 OK,我误解了输出。显然,你想要追踪的是七个随机数,而不是剩余的59-7列表。请参阅对我的回答列表的修改1是输出列表是的,我希望输出19组独立的7个数字:[1,2,5,36,47,53,35][55,3,15,36,7,5,3]等。您的代码阅读起来很有趣,但是我在分配之前引用了本地变量“池”,因此不确定它是否有效!啊,所以我修改了代码,使其能够工作(在函数中移动了列表增量-输出给我一个垂直的单整数行,如:[34]。因此,结束输出列表似乎只包含1个值,其中我需要y个值。我对OP进行了编辑,希望它能使我所需的输出更清晰。我可以看到你在用它做什么,它并没有完全提供我所需的输出,但我想你已经接近了!这看起来比我的原始代码要好:)我再次修改了这个答案。如果您的唯一目标是打印与问题中所要求的值相匹配的值,那么就更简单了,因为您可以删除两行
pool\u list
。由于您的努力,我编辑了问题并用我正在使用的代码替换了代码。我想这只是让它更清楚了——对不起,我第一次解释得不太清楚。我只是修改了我的两个答案来打印你想要的。祝你好运