2016-10-27 29 views
4

私は小さな疑問を抱いています。次のコードを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] 

しかし、それはBE-必要があります。

[62, 98, 98, 27, 23, 70, 98, 98, 93, 93, 53, 60, 60, 23] 

それが必要として、私は取得していますのみエラーが最後の要素62であります誰かがその理由を説明することはできますか?

+2

yがリスト(4)の最後の要素である場合、 'x.index(4)= 0'です。それは問題を引き起こす 'index'を使ってあなたのリストに4を複製したものです。 – asongtoruin

+0

それはそれを指摘するための正確なエラーと感謝です。 – TANMAYA

答えて

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で、排他的な最後の要素を意味するので、スキップします。

x[:-1]からx[:]に変更すると、すべての要素を通過します。

関連する問題