Pythonでリストの偶数インデックス同士・奇数インデックス同士を交換するプログラム
問題の概要
数値のリスト nums が与えられたとき、連続する偶数インデックス同士、および連続する奇数インデックス同士をそれぞれ入れ替えた結果のリストを返します。
たとえば、入力が nums = [8,5,3,4,8,9,3,6,4,7] の場合、出力は [3, 4, 8, 5, 3, 6, 8, 9, 4, 7] となります。
解決の手順
この問題は、次の手順で解くことができます。
- i を 0 から(リストの長さ − 2)まで、4 ずつ増やしながらループする
- i + 2 がリストの長さ未満であれば、nums[i] と nums[i + 2] を入れ替える(偶数インデックス同士の交換)
- i + 3 がリストの長さ未満であれば、nums[i + 1] と nums[i + 3] を入れ替える(奇数インデックス同士の交換)
- 最後に nums を返す
実装例
それでは、実際のPythonコードを見てみましょう。
def solve(nums):
for i in range(0, len(nums) - 2, 4):
if i + 2 < len(nums):
nums[i], nums[i + 2] = nums[i + 2], nums[i]
if i + 3 < len(nums):
nums[i + 1], nums[i + 3] = nums[i + 3], nums[i + 1]
return nums
nums = [8,5,3,4,8,9,3,6,4,7]
print(solve(nums))
入力
[8,5,3,4,8,9,3,6,4,7]
出力
[3, 4, 8, 5, 3, 6, 8, 9, 4, 7]
コードのポイント
このアルゴリズムでは、ループのステップ幅を 4 に設定することで、1回の反復で偶数インデックスのペア(i と i+2)と奇数インデックスのペア(i+1 と i+3)の両方をまとめて処理できます。また、i + 2 や i + 3 がリストの長さを超えていないかを毎回確認しているため、要素数が奇数のリストでも範囲外アクセスを起こさず安全に動作します。
-
Pythonで配列の合計を求める方法を徹底解説
この記事では、Pythonを使って配列(リスト)の合計を求める方法について詳しく解説します。 問題文 問題: 配列が与えられたとき、その配列に含まれるすべての要素の合計を計算してください。 最も基本的なアプローチは、配列全体を走査し、各インデックスの要素を順番に加算していく方法です。ここでは、まず組み込み関数を活用したシンプルな実装例を見ていきましょう。 方法1:組み込み関数 sum() を使う Pythonには、イテラブルなオブジェクトの合計を一発で計算できる組み込み関数 sum() が用意されています。これを使えば、コードは非常に簡潔になります。 サンプルコード # 合計を求める関数 de
-
Pythonで配列(リスト)の合計を求める方法をわかりやすく解説
この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に