假设有一个列表可供使用,我不确定这两行代码是否具有相同的返回值:
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...
并仍获得完全相同的结果?
答案 0 :(得分:0)
首先,你循环遍历lst
的元素; 不将这些值用作索引。相反,只需直接使用这些值:
sum(elem for elem in lst[:-1] if elem < 0)
我将i
重命名为elem
以使其更清晰;现在它相当于你的第二个版本,你使用由range()
生成的索引。
如果您已经有序列,并且需要迭代值,则很少需要使用range()
来生成索引。