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

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

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

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

Q&A

解決済

4回答

441閲覧

2つのlistの中の結合

mangopurin

総合スコア12

Python

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

0グッド

1クリップ

投稿2018/11/23 05:49

前提・実現したいこと

lsit1 = [情報,工学,工学科]
list2 = [2,3,4]
同上に2つのリストがあるのですが、リストを結合させて(新しいリストでも可)、list1 = [情報,2,工学,3工学科,4]と表示させたいです。

試したこと

様々なlistの結合を試しましたが、実際はリストの中の数が多く、コードが長くなってしまいます。

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

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

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

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

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

guest

回答4

0

... 様々なlistの結合を試しました ...

どんなものを試したのでしょうか?
私もいろいろ試してみました。

z.py

python3

1from itertools import chain 2 3list1 = ['情報', '工学', '工学科'] 4list2 = [2, 3, 4] 5 6list3 = [] 7for i in range(len(list1)): 8 list3.append(list1[i]) 9 list3.append(list2[i]) 10print(list3) 11 12print(sum([[list1[i], list2[i]] for i in range(len(list1))], [])) 13print(list(chain.from_iterable([[list1[i], list2[i]] for i in range(len(list1))]))) 14print(list(chain.from_iterable(zip(list1, list2)))) 15print([item for pair in zip(list1, list2) for item in pair]) 16print(list(chain(*zip(list1, list2)))) 17 18list3 = [0] * (len(list1) + len(list2)) 19list3[::2] = list1 20list3[1::2] = list2 21print(list3) 22 23for i in range(len(list1)): 24 list1.insert(i * 2 + 1, list2[i]) 25print(list1)

実行例
イメージ説明

この中では、
list(chain(*zip(list1, list2)))
が一番短いです。

参考情報

  • How do I merge two lists into a single list?

https://stackoverflow.com/questions/3471999

  • Pythonでリストをflattenする方法まとめ

http://d.hatena.ne.jp/xef/20121027/p2

投稿2018/11/23 06:43

katoy

総合スコア22324

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

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

0

ベストアンサー

組み込み関数zipを用います。

Python

1>>> list1 = ['情報', '工学', '工学科'] 2>>> list2 = [2, 3, 4] 3>>> 4>>> [e for row in zip(list1, list2) for e in row] 5['情報', 2, '工学', 3, '工学科', 4]

内包表記に不慣れなようなら、次のように書いても良いでしょう。

Python

1>>> dst = [] 2>>> for e1, e2 in zip(list1, list2): 3... dst.append(e1) 4... dst.append(e2) 5... 6>>> print(dst) 7['情報', 2, '工学', 3, '工学科', 4]

投稿2018/11/23 05:51

編集2018/11/23 05:53
LouiS0616

総合スコア35658

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

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

mangopurin

2018/11/23 06:12

詳細な回答ありがとうございます。 プログラミング初心者なので、下記のコードを試してみたのですが、 zip argument #2 must support iterationと出てしまいます。
LouiS0616

2018/11/23 06:13 編集

zipの第二引数として与えた変数の型は何ですか?type関数で調べられます。
guest

0

Rubyですと

list1 = ['情報', '工学', '工学科'] list2 = [2, 3, 4] p list1.zip(list2).flatten #=>["情報", 2, "工学", 3, "工学科", 4]

となります。
https://paiza.io/projects/lPMtB9M_5PPpmRHFGk4GPw

投稿2018/11/23 11:13

DrqYuto

総合スコア432

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

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

0

zip関数を使うと、複数のリストからそれぞれの要素を順番にまとめて取得できます。
参考:Python, zip関数の使い方: 複数のリストの要素をまとめて取得

Python

1even= [i for i in range(10) if i%2 == 0] 2odd = [i for i in range(10) if i%2 != 0] 3ret = [] 4for e,o in zip(even,odd): 5 ret += [e,o] 6print(ret) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

投稿2018/11/23 05:56

can110

総合スコア38233

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問