繁体   English   中英

为什么在Python中将迭代器设置为变量与直接在列表推导中使用迭代器的行为有所不同?

[英]Why does setting an iterator to a variable in Python behave differently than using it directly in a list comprehension?

我没有期待第一个输出,尽管这很有意义。 原始迭代器仅循环一次。 我不明白的是,如果在comprehension语句中使用了reversed()函数,为什么它的行为会有所不同。

>>> old_list = ['h', 'e', 'l', 'l', 'o']
>>> rev_old = reversed(old_list)
>>> [i + a for i in old_list for a in rev_old]
['ho', 'hl', 'hl', 'he', 'hh']
>>> [i + a for i in old_list for a in reversed(old_list)]
['ho', 'hl', 'hl', 'he', 'hh', 'eo', 'el', 'el', 'ee', 'eh', 'lo', 'll', 'll', 'le', 'lh', 'lo', 'll', 'll', 'le', 'lh', 'oo', 'ol', 'ol', 'oe', 'oh']

第一种方法仅对reversed(old_list)求值一次。 其等效代码如下:

rev_old = reversed(old_list)
lst = []
for i in old_list:
    for a in rev_old:
        lst.append(i + a)

但是,第二个多次重新评估了reversed(old_list) 其等效代码如下:

lst = []
for i in old_list:
    for a in reversed(old_list):
        lst.append(i + a)

在上面的代码中,使用for i in old_list:每次迭代来评估for a in reversed(old_list):for a in reversed(old_list):reversed(old_list)部分。


关于您的评论,您拥有的是嵌套列表推导 等效代码:

[[str(x)+'+'+str(y) for x in [10,30,50]] for y in [20,40,60]]

会是这样的:

outer = []
for y in [20,40,60]:
    inner = []
    for x in [10,30,50]:
        inner.append(str(x)+'+'+str(y))
    outer.append(inner)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM