这两个生成器表达式是否做同样的事情?

时间:2017-05-13 12:51:46

标签: python generator-expression

假设有一个列表可供使用,我不确定这两行代码是否具有相同的返回值:

sum(lst[i] for i in lst[:-1] if lst[i]<0)

sum(lst[i] for i in range(len(lst)-1) if lst[i]<0)

此外,我是否可以将sum(lst[i]...替换为sum(i...并仍获得完全相同的结果?

1 个答案:

答案 0 :(得分:0)

首先,你循环遍历lst的元素; 将这些值用作索引。相反,只需直接使用这些值:

sum(elem for elem in lst[:-1] if elem < 0)

我将i重命名为elem以使其更清晰;现在它相当于你的第二个版本,你使用由range()生成的索引。

如果您已经有序列,并且需要迭代值,则很少需要使用range()来生成索引。