【问题标题】:python create list within while looppython在while循环中创建列表
【发布时间】:2017-11-22 17:37:16
【问题描述】:

我已经定义了一个将文件中的行读入列表的函数。然后我想在一个while循环中调用这个函数。该列表在第一个循环中正确创建,但以下循环创建一个空列表。

如何让我的代码每次都重新生成列表? (为澄清起见,这不是最终功能,但我已将代码中的问题与列表的生成隔离开来)。

def get_random_gene_list(input):
    disease_genes = []
    for line in input:
        disease_genes.append(line.strip())

    return disease_genes

x=0
while x < 5:

    unpack_gene_list = get_random_gene_list(args.i)
    print unpack_gene_list


    x = x + 1

【问题讨论】:

  • 您的 get_random_gene_list 函数不会随机执行任何操作。
  • 完整功能如下。正如我在帖子中所说,我隔离了这个问题,并没有费心发布完整的功能。 def get_random_gene_list(输入,子集):genes_to_remove = set(random.sample(输入,子集))genes_to_use = list(set(输入)-genes_to_remove)返回(genes_to_use,genes_to_remove)

标签: python list loops


【解决方案1】:

假设args.i 是一个文件对象,您在第一个循环中读取文件,这会将文件指针放在文件末尾。您是否需要在每个循环中重新读取文件?如果没有,您应该在while 循环之外调用该函数并保存结果列表。实际上,您甚至不需要该功能。此外,在这种情况下,您应该使用for 循环。

unpack_gene_list = list(args.i)

x = 0
for x in range(5):
    print unpack_gene_list

【讨论】:

  • 我最终按照您的建议在 while 循环之外读取了文件。我以为我已经尝试过了,但我一定是做错了什么。您是否碰巧知道为什么文件没有被重新读取并在每个循环中保存到列表中?我不明白为什么它在第一个循环处停止。谢谢!
  • @dana,当您从文件对象中读取数据时,它会向前移动文件指针。如果不将其移回,您将无法重新读取相同的文件对象。
  • 哦,我刚刚调查了一下。感谢您的帮助。
【解决方案2】:

这对我来说很好,除非我误解了你的问题。问题可能在于您的输入。

k = ['1','1','a','aa']

def get_random_gene_list(input):
    disease_genes = []
    for line in input:
        disease_genes.append(line.strip())
    return disease_genes

x=0
while x < 5:
    unpack_gene_list = get_random_gene_list(k)
    print unpack_gene_list
    x = x + 1

输出:

['1', '1', 'a', 'aa']
['1', '1', 'a', 'aa']
['1', '1', 'a', 'aa']
['1', '1', 'a', 'aa']
['1', '1', 'a', 'aa']

Process finished with exit code 0

【讨论】:

  • 是的,我也以这种方式进行了故障排除。我想问题是我的输入是从文件中读取的。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 2021-11-13
  • 2013-05-21
  • 2021-01-24
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多