2

次のことを行う最もpythonicな方法は何ですか? 古いリストを変更することも、新しいリストを作成することもできます。

oldList = [1, 2, 3, 4]

newList = [1, 1, 2, 2, 3, 3, 4, 4]
4

6 に答える 6

9

リスト内包表記の使用:

>>> oldList = [1, 2, 3, 4]
>>> newList = [x for x in oldList for _ in range(2)]
>>> newList
[1, 1, 2, 2, 3, 3, 4, 4]

上記のリスト内包表記は、次のネストされた for ループに似ています。

newList = []
for x in oldList:
    for _ in range(2):
        newList.append(x)
于 2013-11-12T05:36:50.580 に答える
1

機能概念を使用したさらに 2 つのアプローチ:

>>> list_ = [1,2,3,4]
>>> from itertools import chain
>>> list(chain(*[[x,x] for x in list_]))
[1, 1, 2, 2, 3, 3, 4, 4]
>>> reduce(lambda x,y: x+y, [[x,x] for x in list_])
[1, 1, 2, 2, 3, 3, 4, 4]

そしてnumpyを使用するもの:

list(np.array([[x,x] for x in list_]).flatten())

最後に、リスト内包表記として:

[x for y in zip(list_, list_) for x in y]
于 2013-11-12T07:02:54.030 に答える
1
>>> oldList = [1, 2, 3, 4]
>>> (4*(oldList+[0]+oldList))[::5]
[1, 1, 2, 2, 3, 3, 4, 4]

不思議なことに

$ python -m timeit -s  "oldList = [1, 2, 3, 4]" "[x for x in oldList for _ in range(2)]"
1000000 loops, best of 3: 1.65 usec per loop
$ python -m timeit -s  "oldList = [1, 2, 3, 4]" "(4*(oldList+[0]+oldList))[::5]"
1000000 loops, best of 3: 0.995 usec per loop
于 2013-11-12T10:40:28.147 に答える