前提・実現したいこと
以下のようなリストを作成したいです.for文を使って地道に書くことはできるのですが,もう少し短いコードで書ける方法があればご教授いただきたいです.
['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd']
該当のソースコード
Python
1x_list = [] 2for x in ['a', 'b', 'c', 'd']: 3 x_list.append(x) 4 x_list.append(x) 5print(x_list)
補足情報(FW/ツールのバージョンなど)
Python 3系
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
(1)2段の内包表記
python
1x_org = ['a', 'b', 'c', 'd'] 2x_list = [x for x in x_org for _i in range(2)]
(2)内包表記で['a', 'a'], ['b', 'b'],,,
のシーケンスを作ってflatten
python
1from itertools import chain 2 3x_org = ['a', 'b', 'c', 'd'] 4x_list = list(chain.from_iterable([x] * 2 for x in x_org))
(3)teeとzipで('a', 'a'), ('b', 'b'),,,
のシーケンスを作ってflatten
python
1from itertools import chain, tee 2 3x_org = ['a', 'b', 'c', 'd'] 4x_list = list(chain.from_iterable(zip(*tee(x_org, 2))))
追記
ちなみになんですが、質問に書いてあるコードが最速だと思います。
plain
1In [1]: from itertools import chain, repeat, tee 2 ...: 3 ...: def a(x_org): 4 ...: return [x for x in x_org for _i in range(2)] 5 ...: 6 ...: def aa(x_org): 7 ...: return [y for x in ['a', 'b', 'c', 'd'] for y in [x] * 2] 8 ...: 9 ...: def b(x_org): 10 ...: return list(chain.from_iterable([x] * 2 for x in x_org)) 11 ...: 12 ...: def c(x_org): 13 ...: return list(chain.from_iterable(zip(*tee(x_org, 2)))) 14 ...: 15 ...: def d(x_org): 16 ...: x_list = [] 17 ...: for x in x_org: 18 ...: x_list.append(x) 19 ...: x_list.append(x) 20 ...: return x_list 21 ...: 22 23In [2]: x_org = ['a', 'b', 'c', 'd'] 24 25In [3]: %timeit a(x_org) 261.33 µs ± 44.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) 27 28In [4]: %timeit aa(x_org) 29991 ns ± 29.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) 30 31In [5]: %timeit b(x_org) 321.25 µs ± 5.31 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) 33 34In [6]: %timeit c(x_org) 351.08 µs ± 42.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) 36 37In [7]: %timeit d(x_org) 38617 ns ± 25.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
投稿2021/03/31 03:04
編集2021/03/31 03:21総合スコア11231
0
ベストアンサー
内包表記だけで書くならこうなります。
python
1x_list = [y for x in ['a', 'b', 'c', 'd'] for y in [x] * 2] 2print(x_list) 3# ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd']
sumでもできます。
python
1x_list = sum(([x] * 2 for x in ['a', 'b', 'c', 'd']), [])
投稿2021/03/31 02:50
総合スコア4794
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
reduceを使った別解です。
Python3
1import operator 2from functools import reduce 3 4x = ['a', 'b', 'c', 'd'] 5x_list = reduce(operator.add, zip(x,x)) 6print(x_list) 7
投稿2021/04/01 05:59
編集2021/04/01 06:01退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。