-1

假设有一个列表要处理,我不确定这两行代码是否具有相同的返回值:

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...并仍然得到完全相同的结果吗?

4

1 回答 1

0

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

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

我重命名ielem以使这一点更清楚;现在它相当于您的第二个版本,您在其中使用由range().

当您已经有一个序列并且需要迭代这些值时,很少需要使用range()来生成索引。

于 2017-05-13T12:54:01.290 回答