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

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

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

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

Q&A

解決済

2回答

609閲覧

リストとリストの合成の方法が判りません。

secondson

総合スコア21

Python

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

0グッド

0クリップ

投稿2019/11/11 05:53

編集2019/11/11 06:39

python

1a=[[1][2][3]] 2b=[[4][5][6]] 3c=[[7][8][9]]

上記のようなリストを合成し

python

1d=[[1,4,7][2,5,8][3,6,9]]

という新たなリストを作りたいのですが方法が判りません。

どのような方法があるのかご教授頂けたら幸いです。よろしくお願いします

追記
このリストはグレースケールの画像の濃度値を読み取ったものです。

python

1img=plt.imread(a.jpg) 2h,w=img.shape 3data1=img.reshape(h*w,1) 4print(data1) 5[[56] 6 [102] 7 [117] 8.... 9 [142]]

このようなリストに対して同様な形態のリストを合成させ

python

1print(data2) 2[[55] 3 [122] 4 [176] 5.... 6 [154]] 7 8print(data3) 9[[56,55] 10 [102,122] 11 [117,176] 12.... 13 [142,154]]

といった出力を得たいと考えています。

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

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

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

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

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

azuapricot

2019/11/11 06:01

[1][2][3] ってそれぞれが配列なんですか?それとも 1,2,3 という単なる数字ですか?
secondson

2019/11/11 06:04

それぞれが配列です。拙い表現で申し訳ないです。
hayataka2049

2019/11/11 06:06

質問文のコード(?)はPythonのlistのリテラルとして構文上正しくありません。実行しても構文エラーにならないよう、正しい構文に修正してください。
secondson

2019/11/11 06:33

上記のコードはmatplotlibを用いて出力した数値なのでlistとは別物であるため、リストに変換してから扱うのが良いのでしょうか。
hayataka2049

2019/11/11 06:33

(追記に関して)それ、たぶんlistではないです。type関数で型を確認してください。きっとnumpy配列だと思います。 その場合はその旨を質問文に追記してください。listなのかnumpyの配列なのかで処理の方針が変わります。
hayataka2049

2019/11/11 06:35

data1とdata2がnumpyの配列なのはわかりましたが、data3は整数部と小数部で表現したいということですか?
secondson

2019/11/11 06:39

最後のコードが「,」ではなく「.」となっていました。修正しましたのでよろしくお願いします。
guest

回答2

0

ベストアンサー

numpy配列を水平方向に結合したい場合は、numpy.hstackが便利です。

python

1>>> import numpy as np 2>>> data1 = np.array([[56], [102], [117], [142]]) 3>>> data2 = np.array([[55], [122], [176], [154]]) 4>>> data1 5array([[ 56], 6 [102], 7 [117], 8 [142]]) 9>>> data2 10array([[ 55], 11 [122], 12 [176], 13 [154]]) 14>>> data3 = np.hstack([data1, data2]) 15>>> data3 16array([[ 56, 55], 17 [102, 122], 18 [117, 176], 19 [142, 154]]) 20

numpy.hstack — NumPy v1.17 Manual

不要になった回答

python

1a = [[1], [2], [3]] 2b = [[4], [5], [6]] 3c = [[7], [8], [9]] 4 5d = [[*x, *y, *z] for x, y, z in zip(a, b, c)] # [*x, *y, *z]じゃなくてx+y+zでいいかな・・・ 6print(d) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]] 7

投稿2019/11/11 06:26

編集2019/11/11 14:08
hayataka2049

総合スコア30933

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

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

azuapricot

2019/11/11 06:29

こんぱくと!(こんな風に書けるようになりたい)
secondson

2019/11/11 06:55

拙い文章に対してご回答いただき本当にありがとうございました。
secondson

2019/11/11 06:58

追記で申し訳ないのですが、dを得る際にa,b,cの三つではなく、input関数から得た任意の数値の個数分を合成することは可能でしょうか。
secondson

2019/11/11 07:09

上記で述べたようにグレースケール画像の濃度値を取得しているのですが、毎回決まった画像の枚数ではなく、その都度に枚数を選択可能なコードにしたいと考えています。そこで取り込みたい枚数を取得し、その枚数分の濃度値をひとつのリストにまとめたいです。 そのため、 print(data3) ➡[[56,55・・・] [102,122・・・] [117,176・・・] .... [142,154・・・]] において「・・・」は入力した数値に依存して増減していくコードにしたいと考えています。
hayataka2049

2019/11/11 14:05 編集

枚数分の配列を取り込んでdata1,data2のような形式にし、listに格納するコードが書けていれば、仮にそれらを格納したlistが lst = [data1, data2, ……, datan] のように定義されているとして result = np.hstack(lst) のように結合を行うことができます。要するに、numpy.hstackが引数に受け取るリストの要素数は幾つでも構いません(リファレンス参照)。
secondson

2019/11/11 07:22

希望していた結果を得ることが出来ました。何度も質問に答えて頂きありがとうございました。
guest

0

Python

1a=[[1],[2],[3]] 2b=[[4],[5],[6]] 3c=[[7],[8],[9]] 4 5new_list = [] 6 7for i in range(3): 8 inner_list = [] 9 inner_list.append(d[i][0]) 10 inner_list.append(e[i][0]) 11 inner_list.append(f[i][0]) 12 new_list.append(inner_list) 13 14print(new_list)
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

(もっと簡単な書き方ありそう)

投稿2019/11/11 06:12

azuapricot

総合スコア2341

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問