如何将生成器对象转换为列表?

时间:2016-03-14 19:23:40

标签: python list generator

我的代码

var tTestCases = JsonConvert.DeserializeObject<Test002.RootObject[]>(File.ReadAllText(@"C:\test\Automation\API\Test002.json"));

我得到了

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

我应该把列表放在哪里,或者我需要重写代码?

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

2 个答案:

答案 0 :(得分:18)

如果您确实需要一个列表,您可以这样做:

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

答案 1 :(得分:3)

要将生成器表达式转换为列表,只需执行以下操作:

0x1414

请注意,如果生成器表达式可以生成无限列表,则无法获得预期的结果。