[解決済み] リストの奇数位置の要素を抽出する
質問
既存のリストのサブリストとなるリストを作成したいのですが、どうすればよいでしょうか。
例えば
L = [1, 2, 3, 4, 5, 6, 7]
というサブリストを作りたい場合
li
このような
li
に含まれるすべての要素を含む。
L
の全ての要素を含む。
でできるのに対して
L = [1, 2, 3, 4, 5, 6, 7]
li = []
count = 0
for i in L:
if count % 2 == 1:
li.append(i)
count += 1
しかし、同じことをより少ないステップ数で効率的に行う別の方法があるかどうかを知りたいのです。
どのように解決するのですか?
解決方法
はい、できます。
l = L[1::2]
と、これだけです。結果には、以下の位置に配置された要素(
0
-をベースにしているので、最初の要素は位置
0
にあり、2 番目の要素は
1
など)。
1, 3, 5
となるので、結果(実際の数値)は
2, 4, 6
説明
この
[1::2]
はリストスライスのための単なる表記法です。通常は以下のような形になっています。
some_list[start:stop:step]
を省略した場合
start
を省略した場合、デフォルトの(
0
) が使われます。そのため、最初の要素(位置
0
であるため,インデックスが
0
-をベースにしているため)が選択されるでしょう。この場合、2番目の要素が選択されます。
2番目の要素が省略されているため、デフォルト(リストの最後)が使用されています。つまり、リストが反復されているのです を繰り返していることになります。 .
また、第3引数(
step
) も用意しました。
2
. つまり、ある要素が選択され、次の要素はスキップされ、といった具合になります。
つまり、要約すると、この場合
[1::2]
は意味します。
- は2番目の要素を取ります(ちなみに、インデックスから判断すると、奇数の要素です)。
-
要素をひとつ飛ばし (なぜなら私たちは
step=2
とは逆に、1つスキップしています。step=1
はデフォルトです)。 - 次の要素を取る。
- リストの最後に到達するまで、手順2.~3.を繰り返す。
EDIT : Pythonのリストスライス記法について、@PreetKukretiが別の説明のリンクをくれました。こちらをご覧ください。 Python のスライス記法について説明する
番外編 - カウンタを
enumerate()
あなたのコードでは、明示的にカウンターを作成し、増やしています。Pythonでは、これは必要ありません。
enumerate()
:
for count, i in enumerate(L):
if count % 2 == 1:
l.append(i)
上記は、あなたが使っていたコードと全く同じ目的を果たします。
count = 0
for i in L:
if count % 2 == 1:
l.append(i)
count += 1
エミュレーションの詳細
for
ループをエミュレートします。
Pythonの'for'ループでインデックスにアクセスする
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] リストに値が存在するかどうかを確認する最速の方法
-
[解決済み] Pythonで一定の大きさの空リストを作成する
-
[解決済み】pandasでカラムの種類を変更する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] スライス表記を理解する
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
-
[解決済み] Django filter queryset __in for *every* item in list