前提・実現したいこと
lsit1 = [情報,工学,工学科]
list2 = [2,3,4]
同上に2つのリストがあるのですが、リストを結合させて(新しいリストでも可)、list1 = [情報,2,工学,3工学科,4]と表示させたいです。
試したこと
様々なlistの結合を試しましたが、実際はリストの中の数が多く、コードが長くなってしまいます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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する方法まとめ
投稿2018/11/23 06:43
総合スコア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総合スコア35658
0
Rubyですと
list1 = ['情報', '工学', '工学科'] list2 = [2, 3, 4] p list1.zip(list2).flatten #=>["情報", 2, "工学", 3, "工学科", 4]
投稿2018/11/23 11:13
総合スコア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
総合スコア38234
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。