最後の要素と最初の要素の合計を含むリスト内の連続するペアの合計

2020-08-02 python list for-loop

[1,3,5,6,8,7]ような要素のリストがあります。 リストの最初の要素とともに最後の要素も追加されるように、リストの2つの連続する要素の合計のリストが必要です。 上記の場合、このリストが必要です: [4,8,11,14,15,8]

しかし、forループ中に最後と最初の要素を追加すると、範囲外のインデックスが発生します。 次のコードを検討してください。

List1 = [1,3,5,6,8,7]
List2 = [List1[i] + List1[i+1] for i in range (len(List1))]

print(List2)

Answers

i+1ため、インデックスは範囲外になります

List1 = [1,3,5,6,8,7]
List2 = [List1[i-1] + List1[i] for i in range (len(List1))]

print (List2)

このようにちょっと動作します
結果:

[8, 4, 8, 11, 14, 15]

実際に行っているのは、リストに連続した項目を追加することですが、最後のインデックスに到達しても、コードは最後のインデックスに1を追加するため、範囲外のインデックスエラーが発生します。次の使用を検討する必要があります。

List1 = [1,3,5,6,8,7]
List2 = [List1[i] + List1[i+1] for i in range (len(List1) - 1)]
List2.append(List1[0] + List1[-1])

print (List2)
List2 = [List1[i] + List1[(i+1)%len(List1)] for i in range (len(List1))]

あなたがそれをlen(List1)に実行しているので-1 したがって、iの値がlen(List1)-1の場合、i + 1は範囲外になります(つまり、len(List1))。 したがって、この解決策を試すことができます:

List2 = [List1[i-1] + List1[i] for i in range (len(List1))]

またはあなたがすることができます:

List2 = [List1[i] + List1[i+1] for i in range (len(List1)-1)]

または、他のロジックも使用できます。 乾杯!

これはリストを回転させます

In [9]: List1[1:] + List1[:1]                                                                 
Out[9]: [3, 5, 6, 8, 7, 1]

したがって、以下は完全に機能します

In [8]: [x + y for x, y in zip(List1, List1[1:] + List1[:1])]                                 
Out[8]: [4, 8, 11, 14, 15, 8]
[List1[i] + List1[(i+1) % len(List1)] for i in range(len(List1))]

または

[sum(tup) for tup in zip(List1, List1[1:] + [List1[0]])]

または

[x + y for x, y in zip(List1, List1[1:] + [List1[0]])]  

i == 5場合、「if」ステートメントに入り、 i-1設定されます。 List[-1]List[len(List) - 1] List[-1]と同じであることに注意してください。つまり、 List[i+1]List[0]の最初の要素であるList[0]になります。

for i in range(len(List1)):
    if i == len(List1) - 1:
        i = -1
    List2.append(List1[i] + List1[i+1])

ここに別の醜い解決策があります:

List1 = [1,3,5,6,8,7] 
List2 = [List1[i] + (List1+[List1[0]])[i+1] for i in range (len(List1))]

print (List2)

まだ回答されていないいくつかのpythonic回答:

mapを使用すると読みやすくなります。

List2 = list(map(sum, zip(List1, List1[1:] + List1[:1])))

itertoolsを使用してリストをオフセットすることもできます。

import itertools
List2 = list(map(sum, zip(List1, itertools.islice(itertools.cycle(List1), 1, None))))

Related