[解決済み] リストやタプルから明示的に項目を選択する
2022-05-16 04:34:29
質問
以下のようなPythonのリスト(タプルでも可)があります。
myList = ['foo', 'bar', 'baz', 'quux']
と言うことができます。
>>> myList[0:3]
['foo', 'bar', 'baz']
>>> myList[::2]
['foo', 'baz']
>>> myList[1::2]
['bar', 'quux']
インデックスが特定のパターンを持たない項目を明示的に選択するにはどうしたらよいでしょうか?例えば
[0,2,3]
. あるいは、1000個の項目からなる非常に大きなリストから
[87, 342, 217, 998, 500]
. それを行ういくつかのPythonの構文がありますか?のように見える何か。
>>> myBigList[87, 342, 217, 998, 500]
どのように解決するのですか?
list( myBigList[i] for i in [87, 342, 217, 998, 500] )
python2.5.2で比較しました。
-
19.7 usecです。
[ myBigList[i] for i in [87, 342, 217, 998, 500] ]
-
20.6 usec:
map(myBigList.__getitem__, (87, 342, 217, 998, 500))
-
22.7 usecです。
itemgetter(87, 342, 217, 998, 500)(myBigList)
-
24.6ユーザック
list( myBigList[i] for i in [87, 342, 217, 998, 500] )
なお、Python3では、1stが4thと同じになるように変更されています。
もう一つの選択肢は、最初に
numpy.array
で始めることで、リストによるインデックス付けや
numpy.array
:
>>> import numpy
>>> myBigList = numpy.array(range(1000))
>>> myBigList[(87, 342, 217, 998, 500)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> myBigList[[87, 342, 217, 998, 500]]
array([ 87, 342, 217, 998, 500])
>>> myBigList[numpy.array([87, 342, 217, 998, 500])]
array([ 87, 342, 217, 998, 500])
は
tuple
は、それらがスライスであるため、同じようには動作しません。
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み] インデックスを指定してリストから要素を削除する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
python call matlab メソッドの詳細
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み】リストのインデックスを把握して複数の要素にアクセスする