質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1198閲覧

Python リストの中から指定したインデックス番号の要素を複数同時に取り出す。

pokeharry

総合スコア27

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/07 01:57

Pythonで、リストの中から指定したインデックス番号の要素を複数同時に取り出す。といったことをしたいと思っております。
具体的には

sample_list = [a, b, c, d, e, f, g]

の中から、1番目、5番目、6番目を取り出すといった流れです。
また、取り出したいインデックス番号は下記のようにランダムに近い形でリスト化されています。

wantnumber_list_all = [[0, 1, 3], [1, 5, 6], [1, 3, 4]]

結果として、

result_list_all = [[a, b, d], [b, f, g], [b, d, e]]

のような形で結果を取得したいと思っております。

考えたこととしては、

result_list_all=[] for wantnumber_list in wantnumber_list_all: result_list=[] for i, wantnumber in enumerate(wantnumber_list): result_list.append(sample_list[i][wantnumber]) result_list_all.append(result_list)

として可能かとは思うのですが、 forが入れ子になったり、リストが多かったりと、
無駄が多いように感じます。

アドバイス頂きたいです。よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

内包表記にしただけですが、ご参考まで。

python3

1sample_list = ["a", "b", "c", "d", "e", "f", "g"] 2wantnumber_list_all = [[0, 1, 3], [1, 5, 6], [1, 3, 4]] 3result_list = [[sample_list[i] for i in lst] for lst in wantnumber_list_all] 4print(result_list) 5# [['a', 'b', 'd'], ['b', 'f', 'g'], ['b', 'd', 'e']]

投稿2021/07/07 02:10

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

内包表記を使うと以下のようになります。

python

1sample_list = np.array(['a', 'b', 'c', 'd', 'e', 'f', 'g']) 2wantnumber_list_all = np.array([[0, 1, 3], [1, 5, 6], [1, 3, 4]]) 3result_list_all = [[sample_list[i] for i in x] for x in wantnumber_list_all]

実行結果

python

1>>> sample_list = np.array(['a', 'b', 'c', 'd', 'e', 'f', 'g']) 2>>> wantnumber_list_all = np.array([[0, 1, 3], [1, 5, 6], [1, 3, 4]]) 3>>> result_list_all = [[sample_list[i] for i in x] for x in wantnumber_list_all] 4>>> print(result_list_all) 5[['a', 'b', 'd'], ['b', 'f', 'g'], ['b', 'd', 'e']]

投稿2021/07/07 02:18

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

numpy を使用しますが、以下のような処理で

import numpy as np sample_list = np.array(["a", "b", "c", "d", "e", "f", "g"]) wantnumber_list_all = np.array([[0, 1, 3], [1, 5, 6], [1, 3, 4]]) result_list_all = sample_list[wantnumber_list_all] print(result_list_all)

以下の結果になります。

[['a' 'b' 'd'] ['b' 'f' 'g'] ['b' 'd' 'e']]

投稿2021/07/07 02:08

編集2021/07/07 10:20
nnkkmto

総合スコア175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bsdfan

2021/07/07 09:47

numpy使うなら内包使わずに result_list_all = sample_list[wantnumber_list_all] でできますよ。
nnkkmto

2021/07/07 10:21

確かにそうですね、、、修正しました!ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問