リストが空になるまで3番目の要素を削除して出力するPythonプログラム
はじめに
まずリストを作成します。リストの開始インデックスは0であり、3番目の要素の位置は2です。このプログラムでは、リストが空になるまで以下の処理を繰り返します。
- 次の3番目の要素のインデックスを求める
- その要素の値を出力する
- リストから要素を削除し、リストの長さを1つ減らす
実行例
A:[10,20,30,40] 出力:30 20 40 10
動作の解説
最初の3番目の要素は「30」です。次は「40」から数え始め、3番目の要素は「20」になります。さらに「40」から数え始めると、今度は3番目の要素が「40」自身になり、最後に「10」が出力されます。
アルゴリズム
ステップ1:初期値の設定
リストのインデックスは0から始まり、最初の3番目の要素は位置2にあります。
変数 p=2、開始インデックス id=0
ステップ2:リストの長さを取得
listlen = len(LST) # リスト(LST)の長さ
ステップ3:リストが空になるまで繰り返す
リストが空になるまで走査し、毎回次の3番目の要素のインデックスを求めます。
while(listlen > 0) id = (p + id) % listlen A = LST.pop(id) # 対象の要素を削除して出力 listlen -= 1 end while
サンプルコード
# リストが空になるまで3番目の要素を削除する
def removenumber(no):
# リストは0から始まるインデックスを使用
p = 3 - 1
id = 0
lenoflist = len(no)
# リストが空になったらループを抜ける
while lenoflist > 0:
id = (p + id) % lenoflist
# 対象の要素を削除して出力
print(no.pop(id))
lenoflist -= 1
# ドライバーコード
A = list()
n = int(input("配列のサイズを入力してください ::"))
print("整数を入力してください")
for i in range(int(n)):
p = int(input("n="))
A.append(int(p))
print("3番目の要素を削除した後のリストは")
removenumber(A) # 関数を呼び出す実行結果
配列のサイズを入力してください ::9 整数を入力してください n=10 n=20 n=30 n=40 n=50 n=60 n=70 n=80 n=90 3番目の要素を削除した後のリストは 30 60 90 40 80 50 20 70 10
まとめ
このプログラムでは、モジュロ演算(%)を活用することで、リストの末尾に達した後に先頭へ戻る循環的なインデックス計算を実現しています。pop()メソッドで要素を削除しながらリストの長さを都度更新していくことで、リストが空になるまで3番目の要素を順番に取り出せます。これは「ジョセファスの問題(Josephus problem)」と同様の考え方に基づいたアルゴリズムであり、循環リストの処理を学ぶ上で非常に良い例題といえます。
-
Pythonでリストから重複要素を削除する方法を徹底解説
重複した要素を含むリストが与えられたとき、重複を取り除いた新しいリストを作成するのが本記事のテーマです。初心者の方にも理解しやすいよう、基本的なアルゴリズムの手順から実際のコードまで順を追って解説していきます。 実行例 入力::[2,3,4,3,4,6,78,90] 出力::[2,3,4,6,78,90] アルゴリズム 重複要素を削除するための基本的な手順は以下の通りです。 元となるリストを作成する。 空の新しいリストを用意する。 元のリストの各要素を先頭から順番に走査する。 その要素が新しいリストにまだ存在しないかどうかを判定する。 存在しない場合のみ、新しいリストへ要素を追加する。
-
Pythonでインデックスを指定してリストから要素を削除する方法
Pythonでリストからインデックスを指定して要素を削除するには、主に2つの方法があります。del文を使う方法と、pop()メソッドを使う方法です。 del文で要素を削除する del文は、削除したい要素のインデックスを指定して使用します。指定した位置の要素がリストから取り除かれます。 >>> L1=[11,22,33,44,55,66,77] >>> del L1[2] >>> L1 [11, 22, 44, 55, 66, 77] 上記の例では、インデックス2(3番目の要素「33」)が削除され、リストの要素数が1つ減っています。del文は