我有一个小疑问。当在python中运行以下代码时,我没有得到理想的结果。任何人都可以解释原因吗?
x,temp=[4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23],[]
for y in x[:-1]:temp.append(max(y,x[x.index(y)+1]))
print temp
上述代码的输出是: -
[62, 98, 98, 27, 23, 70, 98, 98, 93, 93, 53, 60, 60, 62]
但它应该是 - :
[62, 98, 98, 27, 23, 70, 98, 98, 93, 93, 53, 60, 60, 23]
我得到的唯一错误是在最后一个元素62,因为它应该是23。任何人都可以解释原因吗?
答案 0 :(得分:4)
正如asongtoruin在评论中提到的,您的代码没有做您想做的事情,因为.index
方法找到列表中的第一个匹配元素。因此,当它测试最终的4时,它不会对23进行测试,而是在x
的前4个之后测试62。
这是一个更好的方式。
x = [4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23]
temp = [max(u,v) for u,v in zip(x, x[1:])]
print(temp)
<强>输出强>
[62, 98, 98, 27, 23, 70, 98, 98, 93, 93, 53, 60, 60, 23]
FWIW,避免使用.index
是个好主意,除非你真的需要它,因为它必须在列表中线性扫描以寻找匹配项,因此效率不高。
答案 1 :(得分:1)
切片的结束索引是独占的。你的值是-1,这意味着最后一个独占的元素 - 所以它会跳过它。
将x[:-1]
更改为x[:]
,它将遍历每个元素。