【问题标题】:How to convert generator object into list? [duplicate]如何将生成器对象转换为列表? [复制]
【发布时间】:2016-06-30 00:08:18
【问题描述】:

我的代码

def yieldlines(thefile, whatlines):
  return (x for i, x in enumerate(thefile) if i in whatlines)

file1=open('/home/milenko/EDIs/site1/newst2.txt','r')
whatlines1 = [line.strip() for line in open('m1.dat', 'r')]

x1=yieldlines(file1, whatlines1)

print x1

我明白了

<generator object <genexpr> at 0x7fa3cd3d59b0>

列表应该放在哪里,还是需要重写代码?

我希望我的程序写入文件并读取内容,因此对于在 m1.dat 中写入的特定行。我找到了解决方案 Reading specific lines only (Python)

【问题讨论】:

  • 请准确解释您要做什么。因为你刚刚得到的是一个generator,没有什么真的错的。如果你迭代它,你会得到你的输出。但是您需要注意一些差异。请务必阅读我提供的链接。

标签: python list generator


【解决方案1】:

如果你真的需要一个列表,你可以这样做:

lst = list(generator_object)

但是,如果您只想遍历对象,则不需要列表:

for item in generator_object:
    # do something with item

例如,

sqr = (i**2 for i in xrange(10)) # <generator object <genexpr> at 0x1196acfa0>
list(sqr) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

sqr = (i**2 for i in xrange(10))
for x in sqr:
    print x,
# 0 1 4 9 16 25 36 49 64 81

【讨论】:

  • No.with print list(x1),我只有[]。为什么?
  • 您的生成器必须为空。 thefile 为空或没有行满足条件。
【解决方案2】:

要将生成器表达式转换为列表就足够了:

list(<generator expression>)

请注意,如果生成器表达式可以生成无限列表,您将不会得到您期望的结果。

【讨论】:

    猜你喜欢
    • 2014-07-30
    • 2021-11-25
    • 2018-10-24
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多