前提・実現したいこと
以下の処理を実現したいのですが、もっとよい書き方はありますか?
該当のソースコード
a = [1,3] b = [2,4] c = [] for a,b in zip(a,b): c.append(a) c.append(b) print(c) #実行結果 [1, 2, 3, 4]
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
ベストアンサー
これでどうでしょう。
python
1>>> a = [1,3] 2>>> b = [2,4] 3>>> [y for x in zip(a,b) for y in x] 4[1, 2, 3, 4]
質問のコードにはまずいところがあるので、コメントしておきます。
python
1a = [1,3] 2b = [2,4] 3c = [] 4for a,b in zip(a,b): # ここでループする変数にa,bを使ったせいで上書きされる。この処理の後元のa,bが必要になったらどうするのかと 5 c.append(a) 6 c.append(b) 7print(c) 8 9# 追加 10# 最後にa,bに代入された3,4が表示される 11print(a) # => 3 12print(b) # => 4
うっかり名前を被らせると、後でバグの温床になったりします。
投稿2018/10/12 07:54
編集2018/10/12 08:00総合スコア30933
0
一応ちゃんとしたの書いておきます‥。
python
1c = [y for x in zip(a, b) for y in x]
勘違いコード
python
1c = sorted(a + b)
投稿2018/10/12 07:39
編集2018/10/12 08:00総合スコア16731
0
ネストした list を flatton する方法を web で探してみました。
python3
1a = [1,3] 2b = [2,4] 3 4flatten = lambda x: [z for y in x for z in (flatten(y) if hasattr(y, '__iter__') else (y,))] 5flatten(zip(a,b)) 6 7sum(zip(a, b), ()) 8 9import numpy as np 10np.array(list(zip(a, b))).flatten() 11 12from itertools import chain 13list(chain.from_iterable(zip(a, b))) 14 15from functools import reduce 16reduce(lambda a, b: a + b, zip(a, b)) 17 18[y for x in zip(a, b) for y in x]
参考情報
- Python 3 で flatten する方法いろいろ
https://qiita.com/hoto17296/items/e1f80fef8536a0e5e7db
- Flatten a list of lists in one line in Python
https://coderwall.com/p/rcmaea/flatten-a-list-of-lists-in-one-line-in-python
投稿2018/10/12 13:01
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ご提示のコードが最もシンプルだと思いますが、参考までに。
Python
1>>> from itertools import chain 2>>> 3>>> a = list('123') 4>>> b = list('abc') 5>>> 6>>> c = list(chain.from_iterable(zip(a, b))) 7>>> c 8['1', 'a', '2', 'b', '3', 'c'] 9>>> 10>>> c = list(chain(*zip(a, b))) 11>>> c 12['1', 'a', '2', 'b', '3', 'c']
あるいはサードパーティの more_itertools.interleave を使います。
Python
1>>> import more_itertools 2>>> 3>>> a = list('123') 4>>> b = list('abc') 5>>> 6>>> c = list(more_itertools.interleave(a, b)) 7>>> c 8['1', 'a', '2', 'b', '3', 'c']
投稿2018/10/12 07:43
編集2018/10/12 07:50総合スコア35660
0
python
1a = [1,3] 2b = [2,4] 3c = sum(zip(a, b), tuple())
投稿2018/10/12 11:32
総合スコア6142
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/12 08:03
2018/10/12 08:07
2018/10/12 08:21 編集
2018/10/12 08:42