2017-04-20 8 views
1

リストを取り込んで各インデックスをループし、現在のインデックスの左と右の値を合計するパズルを解いています。左の値の合計が右の値の合計と等しいインデックスが見つかった場合は、そのインデックスを返します。ルーピングスルーリスト返り値負のインデックス

例: [1,2,3,4,3,2,1] インデックス3(値4)にある場合、要素の左と右の合計値は等しい。 (1 + 2 + 3)=(3 + 2 + 1)である。

ただし、入力が負の値のリストである場合は、負のインデックスが戻されます。これは私のコードです:

def get_equal_sum(list): 
    for i in list: 
     if sum(list[:i]) == sum(list[i+1:]): 
      print i 

list = [1,2,3,4,3,2,1] 
get_equal_sum(list) 
>>> 3 

list = [-1,-2,-3,-4,-3,-2,-1] 
get_equal_sum(list) 
>>> -4 

なぜそれは-4ではなく3を返しますか?

ありがとうございました!

+0

第2のリストには「3」はありませんので、どのようにして '3'を印刷できますか?インデックスではなく要素を印刷しています。 – Carcigenicate

+2

おそらく、組み込みの型/関数( 'list')をあなたの変数でシャドウするべきではありません。 –

+3

インデックスを返すのではなく、値そのものを返します。 'enumerate'を使ってインデックスを取得してください。 –

答えて

4

あなたは

for i in list: 
    if sum(list[:i]) == sum(list[i+1:]): 

iを行い、リストのないインデックスはなくです。負の値でスライスをフィードすると、IndexErrorでクラッシュしないという事実は、絶対値が範囲内にある限り、Pythonでは負のインデックス付けがサポートされているため(リストの末尾からのインデックス) 。それはたぶんあなたがそれを逃した理由です。

あなたは、インデックスをしたい場合は、例えばenumerateを使用する必要があります。

for i,_ in enumerate(l): 
    if sum(l[:i]) == sum(l[i+1:]): 

(とlistがリスト型であるため、llistを変更する)

注インデックス/値を解凍するi,_表記とここで必要でない値を破棄してください。

for i in range(len(l)): 
+0

'if'文が' True'のときに '_'を出力します。 – GiantsLoveDeathMetal

+0

@GiantsLoveDeathMetal私はあなたの意見を見ていますが、私はOPもインデックスを印刷したいと思います(したがって 'i'という名前)。この値は、サブリストが同等かどうかをテストする場合にのみ使用されます。変数を使用したい場合は '_'を使用しませんでした。 –

+0

ええ、OPは '私は'私は私のコメントで間違っている返すことを望んでいる – GiantsLoveDeathMetal

0

-4はインデックス-4です。 Pythonで負のインデックスを持つことができます。インデックス-1はリストの最後の要素です。

3
for i in list: 
    ... 

これは、あなたがlen(リスト)上(のpython 3または)xrangeを使用する必要がありますインデックスを通過し、リストの値ではなく、インデックス(それゆえに、なぜあなたが得る-4)を通過

for i in xrange(len(list)): 
    ... 

またはenumerate(list)を使用してください。どのiteratableオブジェクトのインデックス値のペアのタプルを返すので、あなたは、このようなリストの上にインデックスますenumerate:このような状況の指標で

は、おそらくあなたの私です。さらに、you do not want to shadow namesは既にpython自体(つまりlistやmax、min absなど...)ですでに使用されています。これにより、それらの変数をあなたのプログラムに代入するように上書きされます。たとえば、リストはもはやlist(iterable)からリストを作成できる関数ではありませんが、これまで割り当てられていたものは、もはやデフォルトのPythonの方法では使用できなくなりました。 Here is a list of python 2.7 built function in names

+0

よく文書化され、リンクされています。いい答え。 –

関連する問題