Python结果不正确

时间:2016-10-27 11:27:30

标签: python

我有一个小疑问。当在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。任何人都可以解释原因吗?

2 个答案:

答案 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[:],它将遍历每个元素。