[英]Why the Python scope seems to behave differently for list variable and string variable?
[英]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.