Подтвердить что ты не робот

Python: добавьте элемент в список N раз

Кажется, что у Python будет ярлык. Я хочу добавить элемент в список N раз, эффективно делая это:

l = []
x = 0
for i in range(100):
    l.append(x)

Мне кажется, что для этого должен быть "оптимизированный" метод, например:

l.append_multiple(x, 100)

Есть ли?

4b9b3361

Ответ 1

Для неизменяемых типов данных:

l = [0] * 100
# [0, 0, 0, 0, 0, ...]

l = ['foo'] * 100
# ['foo', 'foo', 'foo', 'foo', ...]

Для значений, которые хранятся по ссылке, и вы можете захотеть впоследствии изменить (например, под-списки или dicts):

l = [{} for x in range(100)]

(Причина, по которой первый метод является лишь хорошей идеей для постоянных значений, таких как int или строки, заключается в том, что только при использовании синтаксиса <list>*<number> используется только мелкая копия, и, таким образом, если вы сделали что-то вроде [{}]*100, вы получите 100 ссылок на один и тот же словарь, поэтому изменение одного из них изменит их все. Поскольку ints и строки неизменяемы, это не проблема для них.)

Если вы хотите добавить в существующий список, вы можете использовать метод extend() этого списка (в сочетании с созданием списка вещей, которые нужно добавить с помощью описанных выше методов):

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]

Ответ 2

Используйте расширение, чтобы добавить понимание списка в конец.

l.extend([x for i in range(100)])

Подробнее см. Документы Python.

Ответ 3

Повтор Itertools в сочетании с расширением списка.

from itertools import repeat
l = []
l.extend(repeat(x, 100))

Ответ 4

Вы можете сделать это с пониманием списка

l = [x for i in range(10)];

Ответ 5

Мне нужно было пройти еще один маршрут для задания, но это то, с чем я закончил.

my_array += ([x] * repeated_times)