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

2024-04-19 18:18:02 发布

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

我没有预料到第一个输出,尽管这有点道理。原始迭代器只循环一次。我不明白的是,如果在理解语句中使用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']

Tags: inleloforhhrevelhl
1条回答
网友
1楼 · 发布于 2024-04-19 18:18:02

第一个方法只对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)

在上面的代码中,reversed(old_list)for a in reversed(old_list):部分用for i in old_list:的每次迭代进行求值


关于你的评论,你有一个nested list comprehension。等效代码:

[[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)

相关问题 更多 >