我目前有这个多维列表,我正在尝试从中提取第一列:
>>> print(data)
[['com.borderstylo.retrollect', '0', '0'], ['aabasoft.presents.goldprice', '0', '0'], ['aberl.vlc.light.mote', '0', '0']]
当我使用
时sitelist = []
for row in data:
sitelist.append(row[0])
print(sitelist)
我得到了下面的输出,这就是我所追求的。
['com.borderstylo.retrollect', 'aabasoft.presents.goldprice', 'aberl.vlc.light.mote']
然而,当我使用
时sitelist = []
sitelist = (row[0] for row in data)
print(sitelist)
type(sitelist)
我得到下面的输出,这是一个生成器对象。什么是生成器对象?为什么第一组代码返回与第二组不同的东西?两者看起来非常相似。
<generator object <genexpr> at 0x001A9E10>
generator
非常感谢你的回复。新手在python,但真的想学习。
答案 0 :(得分:1)
使用[]
创建python中的列表推导。
作为替代方案,在处理非常大的数据时,您可以使用与理解相同的语法构建生成器,仅使用()
。
因此,只需使用()
更改[]
。
答案 1 :(得分:1)
row[0] for row in data
给出了一个生成器对象。这就像懒惰的评价。这意味着for循环不会被执行以产生结果,而是创建一个生成器对象,可以在需要时一次执行for循环一次迭代。
这样做是为了提高时间和记忆效率。
如果括在括号中,sitelist = (row[0] for row in data)
将被视为表达式,生成的生成器对象将存储(引用)在sitelist
中。
当它用方括号括起来时,sitelist = [row[0] for row in data]
它是一个列表理解。 for循环立即执行,并在sitelist
中构造并存储(引用)列表。
查看this answer以获取有关python中迭代协议的更多信息 然后在python中探索生成器。有许多文章/博客文章解释了具有不同级别细节的生成器。