Мне пришлось пойти другим путем для назначения, но это то, что я закончил.

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

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

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

l.append_multiple(x, 100)

Есть?

 Karl Knechtel11 янв. 2011 г., 10:35
Убедитесь, что вы понимаете ссылочную семантику Python, прежде чем использовать ее для чего-то нетривиального. Икс, добавленный к l, - это все один и тот же x, поэтому изменение одного из них влияет на них всех (на всех один, на которые ссылается 100 раз).
 Toji11 янв. 2011 г., 06:27
Закончилось идти сl.extend([x] * 100) так как это подходит моей ситуации лучше всего. Янтарь получает ответ за то, что был самым всесторонним. Спасибо!
 Toji11 янв. 2011 г., 15:36
Для пояснения: я использую его для целых чисел, поэтому мое использование безопасно.

Ответы на вопрос(5)

чтобы добавить понимание списка до конца.

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

УвидетьPython документы для дополнительной информации.

Решение Вопроса

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

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

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

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

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

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

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

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]
 Amber30 июл. 2017 г., 19:39
@ Смихель, да, да?ideone.co, м / SffARE
 DarkCygnus08 февр. 2018 г., 20:07
Или объединить оба предложения в видеa.extend(b*n) гдеn это раз, когда вы хотите повторить элементы в б

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

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

но это то, что я закончил.

my_array += ([x] * repeated_times)

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

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

Ваш ответ на вопрос