2016-09-07 5 views
0

私は最近、コードワード(NOTで解決策を求めて解決しました)に記載されているような問題を解決しました。最適化された解決策ではありませんが、への答えを見つけ出す。ペアの和:コードワード

私は解決策を与えるつもりはありませんが、ちょうど

問題が走った。この異常をもたらしたことが起こったのか理解 - 最初の2を返し、整数のリストと、単一の合計値を考えます値を(左から解析してください)出現順に並べると合計を構成します。

非常にシンプルな問題と私が思いついた単純明快でない場合は、最適なソリューション - 私はすべてのテスト・ケースを渡さ

def sum_pairs(ints, s): 
    indices = [] 
    for i in ints: 
     if (s-i) in ints[ints.index(i)+1:]: 
      print(ints.index(i)) 
      print(ints[ints.index(i)+1:]) 
      print(i,s-i) 
      indices.append([ints.index(i),ints[ints.index(i)+1:].index(s-i)+len(ints[:ints.index(i)])+1]) 
    if(len(indices) == 0): 
     return None 
    print(indices) 
    indices.sort(key=lambda x: x[1]) 
    print(indices) 
    return [ints[indices[0][0]], ints[indices[0][1]]] 

私はデバッグのためにprintステートメントを使用し、何が起こっていたのかを把握しました。私を困惑させたサンプルテストケースとその出力を以下に示します。

sum_pairs([1, 2, 3, 4, 1, 0], 2) 

0 
[2, 3, 4, 1, 0] 
(1, 1) 
1 
[3, 4, 1, 0] 
(2, 0) 
0 
[2, 3, 4, 1, 0] 
(1, 1) 
[[0, 4], [1, 5], [0, 4]] 
[[0, 4], [0, 4], [1, 5]] 

sum_pairs([10, 5, 2, 3, 7, 5]) 
1 
[2, 3, 7, 5] 
(5, 5) 
3 
[7, 5] 
(3, 7) 
1 
[2, 3, 7, 5] 
(5, 5) 
[[1, 5], [3, 4], [1, 5]] 
[[3, 4], [1, 5], [1, 5]] 

は、だから今、私はテストケース1でそれを見ることができ、出力1を観測し、見つけ出すことができなかった部分に、0が二回印刷され、int型は、[ints.index(I)1:]は、位置0と4の1の両方の[2,3,4,1,0]とエントリ[0,4]が2回追加されます。 同様のパターンが2 ザ

if (s-i) in ints[ints.index(i)+1:] 

言う条件が真と評価されるべきではない場合int値としての第2の時間[ints.index(I)+1:]テストケースにおいて観察されていることを確認することがあります新しいリストは、iの出現の隣にある項目から始まることになる。

私は解決策を得てもそれほど重要ではないようですが、誰かが実際に何が起こったのかを明らかにすることができれば幸いです。

ノート:私は、2つの悪い経験をしていましたが、私の質問をあらかじめ定義された割合で理由を付けずに捨てました。私がそのような下垂体についてフィードバックを与えることができれば、本当に役立つでしょう、誰かがそれらの質問をチェックし改善があればフィードバックを与えることができれば感謝します。

+1

'ints.index(i)'は、あなたが作業している 'i'の特定のオカレンスのインデックスになると思いますか?そのために 'enumerate'が必要です。 'index'は全く別のことをします。 – user2357112

+0

これは最終的な解決策ではないため、タイムアウトのために最適化する必要があり、この情報は私が提起した問題とは関係ありません。 –

+0

こんにちは@ user2357112私はこの情報を知りませんでした。私の理解は、index(i)が現在のアイテムのインデックスを返すということでした。私は今何が起こっているのか理解しています。私は質問を終わらせる方法を知らないし、十分な評判がないのであなたの答えをマークできません。ありがとう、結構です! –

答えて

1

ints.index(i)あなたが働いているiの特定の出現のインデックスを提供していません。それを望むなら、indexではなく、enumerateが必要です。

ints.index(i)は「intsを通過し、iに等しいints最初要素のインデックスを見つけること」を意味します。 iにはintsがどこから来たのかについての情報はないので、indexはあなたがiの特定の出現を考えていることを伝える方法がありません。 enumerateは、独自のカウンタを保持し、要素を生成するたびにインクリメントすることで、この問題を回避します。したがって、常にどのインデックスにあるかを知ることができます。