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

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

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

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

Q&A

解決済

1回答

921閲覧

pythonで複数のリストの各要素を取り出して二次元配列を作りたい

Lily1007

総合スコア10

Python

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

0グッド

0クリップ

投稿2020/12/10 05:05

pythonで複数のリストの各要素を取り出して二次元配列を作りたい

pythonに関する質問です。
time = [1,2,3,....,30]
freq = [10,20,30,...,300]
Pxx = [0.1,0.2,...,3.0]
のように各長さが同じなlistが3つあったとき,

これをtime, freq, Pxxのそれぞれ各要素を1番目から順に取っていき
data = [[1,10,0.1],[2,20,0.2],...]
という二次元配列を新たに作成したいです。

C言語だと
for(i = 0, i<30 , i++){
fprintf(fp,"%f %f %f\n"time[i], freq[i], Pxx[i]);
}

のようにファイルに書き込んでいけばいいのですが、listではどのように行えばよろしいでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

zipを使うと簡単です。

python3

1time = [1,2,3,30] 2freq = [10,20,30,300] 3Pxx = [0.1,0.2,3.0] 4 5data = [[t, f, p] for t, f, p in zip(time,freq,Pxx)] 6print(data) 7# [[1, 10, 0.1], [2, 20, 0.2], [3, 30, 3.0]]

追記

n番目まで(ただし計算は最後までされてしまいます)

python3

1time = [1,2,3,30] 2freq = [10,20,30,300] 3Pxx = [0.1,0.2,3.0] 4n = 1 5data = [[t, f, p] for i, (t, f, p) in enumerate(zip(time,freq,Pxx)) if i <= n] 6print(data) 7# [[1, 10, 0.1], [2, 20, 0.2]]

元listの要素が多すぎる場合はこちら

python3

1time = [1,2,3,30] 2freq = [10,20,30,300] 3Pxx = [0.1,0.2,3.0] 4n = 1 5data = list() 6for i, (t, f, p) in enumerate(zip(time,freq,Pxx)): 7 if i > n: 8 break 9 data.append([t, f, p]) 10print(data) 11# [[1, 10, 0.1], [2, 20, 0.2]]

投稿2020/12/10 05:12

編集2020/12/10 05:35
jeanbiego

総合スコア3966

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

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

Lily1007

2020/12/10 05:26

zipを使うと上手くいきました。ありがとうございます! また、zipをもちいてtime, freq, Pxxのそれぞれn番目までの要素を取るという操作はそもそも可能なのでしょうか。調べて見ても、特定の要素数を引数としてzipを用いる例が無かったもので…
jeanbiego

2020/12/10 05:37

追記しました。 計算量に応じて好きな方を使ってください。
Lily1007

2020/12/10 12:36

追記に関しても確認しました。誠にありがとうございます。
actorbug

2020/12/10 20:43 編集

同様の処理はitertoolsモジュールのisliceを使っても可能です。 import itertools data = [list(t) for t in itertools.islice(zip(time,freq,Pxx), n)]
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問