一线四联清单

时间:2018-08-07 12:50:16

标签: python

我可以用很长很丑的方式做到这一点:

list_1 = ['AA','BB']

quadrupled = []
for i in list_1:
    quadrupled.append(i)
    quadrupled.append(i)
    quadrupled.append(i)
    quadrupled.append(i)

或更短,使用.extend()

for i in list_1:
    quadrupled.extend([i] * 4)

但是我想知道是否可以使用列表理解功能。

quadrupled = [([i] * 4) for i in list_1]

为我提供了列表列表,但我想要简单的列表。

我知道,这样的单行代码的可读性可能不是很好,因为可能需要使用一些嵌套,并且坚持使用.extend()可能更好,但是我只是想知道是否有可能。

我已经看到相同的两倍,而不是四倍。

5 个答案:

答案 0 :(得分:3)

您可以使用2个for循环进行列表理解:第一个循环遍历输入列表的元素,第二个循环对每个元素附加4次。这是我觉得很可读的解决方案:

list_1 = ['AA','BB']

quadrupled = [i for i in list_1 for _ in range(4)]

print(quadrupled)
# ['AA', 'AA', 'AA', 'AA', 'BB', 'BB', 'BB', 'BB']

使用列表理解的另一种方法是使用zip()函数,但我发现它的可读性较差:

quadrupled = [i for j in zip(list_1,list_1,list_1,list_1) for i in j]

答案 1 :(得分:2)

实际上,您可以使用numpy来使用numpy.repeat,例如:

import numpy as np
np.repeat(['AA','BB'],4)

返回的结果将是四倍的numpy数组
如果您希望将其作为列表使用(尽管建议使用numpy数组),则只需使用list函数将其转换回去

答案 2 :(得分:1)

使用itertools chain + repeat

from itertools import chain, repeat

list_1 = ['AA','BB']

res = list(chain.from_iterable(repeat(i, 4) for i in list_1))

print(res)

['AA', 'AA', 'AA', 'AA', 'BB', 'BB', 'BB', 'BB']

答案 3 :(得分:1)

使用chain中的repeatitertools

>>> from itertools import chain, repeat
>>> list_1 = ['AA','BB']
>>> list(chain(*zip(*repeat(list_1, 4))))
['AA', 'AA', 'AA', 'AA', 'BB', 'BB', 'BB', 'BB']

答案 4 :(得分:-1)

用列表简单地乘以理解

Windows 10