我没有预料到第一个输出,尽管这有点道理。原始迭代器只循环一次。我不明白的是,如果在理解语句中使用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)
求值一次。其等效代码如下:然而,第二个函数多次重新计算
reversed(old_list)
。其等效代码如下:在上面的代码中,
reversed(old_list)
的for a in reversed(old_list):
部分用for i in old_list:
的每次迭代进行求值关于你的评论,你有一个nested list comprehension。等效代码:
会是这样的:
相关问题 更多 >
编程相关推荐