这两个for循环有什么区别?

2024-03-28 10:09:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前有一个多维列表,我正试图从中提取第一列:

>>> 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对象?为什么第一组代码返回与第二组不同的内容?两者看起来非常相似。你知道吗

<generator object <genexpr> at 0x001A9E10>
generator

非常感谢您的回复。在python的新手,但真的很想学习。你知道吗


Tags: comdatageneratorrowlightprintvlcmote
2条回答

python中的列表理解是使用[]创建的。 另一种方法是,在处理非常大的数据时,可以使用与理解相同的语法构造生成器,只使用()。你知道吗

因此,只需将()更改为[]。你知道吗

row[0] for row in data给出一个生成器对象。这就像懒惰的评估。这意味着执行这个for循环并不是为了产生结果,而是创建了一个generator对象,该对象可用于在需要时一次执行for循环。
这样做是为了在时间和记忆方面提高效率。你知道吗

当它括在括号中时,sitelist = (row[0] for row in data)被视为in expression,生成的生成器对象被存储(引用)在sitelist。你知道吗

当它被括在方括号中时,sitelist = [row[0] for row in data]它是一个列表。for循环立即被执行,一个列表被构造并存储(引用)在sitelist。你知道吗

有关python中迭代协议的更多信息,请参阅this answer
然后探索python中的生成器。有许多文章/博客文章对生成器进行了不同程度的详细解释。你知道吗

相关问题 更多 >