Python: Додати елемент до списку N разів


91

Це схоже на те, що для Python потрібен ярлик. Я хочу додати елемент до списку N разів, фактично роблячи це:

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

Мені здається, що для цього повинен бути "оптимізований" метод, приблизно такий:

l.append_multiple(x, 100)

Є там?


9
Закінчилося, l.extend([x] * 100)оскільки це найкраще відповідало моїй ситуації. Янтар отримує відповідь за найповнішу інформацію. Дякую!
Тодзі

4
Переконайтеся, що ви розумієте посилальну семантику Python, перш ніж використовувати це для чогось нетривіального. Х, додані до l, - це все однакові x, тому мутація одного з них впливає на всіх них (усі з них, згадуються 100 разів).
Karl Knechtel

1
Для пояснення: я використовую його для цілих чисел, тому моє використання безпечне.
Тодзі

Відповіді:


132

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

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

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

Для значень, які зберігаються за посиланням, і ви можете змінити їх пізніше (наприклад, підсписки або дикти):

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

(Причина, чому перший метод є лише гарною ідеєю для постійних значень, таких як ints або рядки, полягає в тому, що при використанні <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]

1
Або поєднайте обидві пропозиції у формі, a.extend(b*n)де nє час, коли ви хочете повторити елементи в b
DarkCygnus

26

Використовуйте розширення, щоб додати розуміння списку до кінця.

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

Докладнішу інформацію див. У документах Python .


6

Мені довелося піти іншим шляхом для призначення, але це те, з чим я закінчився.

my_array += ([x] * repeated_times)

5

Повторення Itertools у поєднанні з розширенням списку.

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.