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

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

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

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

Q&A

解決済

2回答

4235閲覧

二次元配列の要素を一つずつ読み込んで処理したい

nijihan

総合スコア19

Python

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

0グッド

0クリップ

投稿2019/12/21 04:07

編集2019/12/21 05:00

二次元配列Bの要素を一つずつ読み込んで以下の処理を行いたいです。
書き方が分からない行は疑問点1、疑問点2としてコメントアウトしてあります。

python

1A = [['apple', 1],['banana', 2],['orange', 3],['grape', 4]] 2B = [['apple', 'ringo'],['banana', 'banana'],['orange', 'orenji'],['grape', 'budou']] 3 4#(疑問点1)Bの0番目の要素(['apple', 'ringo'])をCとして取り出す方法 5#C = ['apple', 'ringo'] 6 7result = [] 8while C: 9 for m in range(len(A)): 10 if A[m][0] == C[0]: 11 a = [] 12 a.append(A[m]) 13 a.append(C[1]) 14 15 result.append(a) 16 #(疑問点2)Aの1番目の要素を読み込む式

上のような処理をして以下の結果を得たいと考えています。

python

1result = [['apple', 1, 'ringo'],['banana', 2, 'banana'],['orange', 3, 'orenji'],['grape', 4, 'budou']]

プログラムの中に書き方が分からない箇所が2つ(疑問点1と疑問点2)あります。
どのように書いたら良いかご教示ください。

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

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

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

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

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

guest

回答2

0

以下でどうでしょう?

result = [x[0]+[x[1][1]] for x in zip(A, B)]

- **動作確認用 Repl.it: **https://repl.it/@jun68ykt/Q230905

※質問者さんからのコメントに

実際のプログラムではBのデータの[m][0]にAにはない要素がある

とあったので、上記の回答は取り下げます。

投稿2019/12/21 04:22

編集2019/12/21 04:45
jun68ykt

総合スコア9058

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

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

nijihan

2019/12/21 04:34

実際のプログラムではBのデータの[m][0]にAにはない要素があるため、 if A[m][0] == C[0]: の処理をつかいたいです。質問で書いたプログラムに#の部分の式を追加する方法では改善できないのでしょうか。
jun68ykt

2019/12/21 04:42

@nijihanさん > 実際のプログラムではBのデータの[m][0]にAにはない要素がある ということなのですね。だとすると、上記の回答に挙げたコードは使えないですのでいったんスルーしてください。 > 質問で書いたプログラムに#の部分の式を追加する方法 については、検討してよい方法が思いつけば回答に追記します。
nijihan

2019/12/21 04:45

readlineのリスト版のような、一つだけリストの要素を読み込む方法があればいいのですが…
guest

0

ベストアンサー

python

1A = [['apple', 1],['banana', 2],['orange', 3],['grape', 4]] 2B = [['apple', 'ringo'],['banana', 'banana'],['orange', 'orenji'],['grape', 'budou']] 3 4result = [[*a, b[1]] for b in B for a in A if a[0] == b[0]] 5print(result)

データが大量にあるなら、二重ループは時間がかかり過ぎるので、辞書化した方がいいでしょう。

python

1A = [['apple', 1],['banana', 2],['orange', 3],['grape', 4],['x',0]] 2B = [['apple', 'ringo'],['banana', 'banana'],['orange', 'orenji'],['grape', 'budou']] 3 4a = {a[0]: a for a in A} 5result = [[*a[b0], b1] for b0, b1 in B if b0 in a] 6print(result)

お書きになったコードで対応しました。

python

1A = [['apple', 1],['banana', 2],['orange', 3],['grape', 4]] 2B = [['apple', 'ringo'],['banana', 'banana'],['orange', 'orenji'],['grape', 'budou']] 3 4result = [] 5for b in B: 6 for a in A: 7 if a[0] == b[0]: 8 result.append([*a, b[1]]) 9 10print(result)

投稿2019/12/21 04:22

編集2019/12/21 21:40
shiracamus

総合スコア5406

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問