потому что cuango я добавляю новый элемент к списку, он это не сохраняет в памяти?

numero [1,2,3,4,5,6]

Я хочу добавить в конце концов число 7 чтобы идти в команде

numero + [7]

Когда выполнил образец список 1 в 7, но если я вновь выполняю это, или звоню уже только он выходит даже 6 Почему?

0
задан 07.03.2019, 10:52
2 ответа

Уже они ответили тебе, что из-за quГ© твоя переменная numero не оказывается измененной, и cГіmo добиваться, чтобы он был изменен. Я сам предложил в комментариях несколько альтернатив. QuerГ, - когда эта расширяет немного informaciГіn, что не я cabГ - в в комментарии, enfocГЎndolo с точки зрения эффективности (в скорости и в использовании памяти).

BГЎsicamente альтернативы:

  • numero = numero + [7]
  • numero += [7]
  • numero.extend([7])
  • numero.append(7)

первую использует оператор +, чтобы прилагать списки. Форма, в которой python он осуществляет эту operaciГіn, состоит в сначала делании копии списка, что habГ - в в numero, despuГ©s aГ±adirle элементы второго списка вслед за + (в этом случае у него есть единственный элемент, 7). Это завершает ее ejecuciГіn, которого есть справа от равного. Переменная numero aГєn не была изменена, потому что 7 aГ±ade в копию, которая осуществилась. В конце концов она asignaciГіn он способствует тому, чтобы переменная numero прекратила относиться к старому списку, который не tenГ - и переместите 7, который был должен относиться к новому списку, у которого sГ - это есть. Старый список aГєn estГЎ в памяти из-за краткого периода времени времени, до тех пор, пока пересборщик мусора из python не удалит ее (этот пересборщик обнаруживает, когда у информации уже нет переменных, которые относились бы в Г©l).

Оставшаяся часть решений не делает эту копию в памяти, но они работают прямо на первоначальном списке:

  • numero.append(7) подает для aГ±adirle информацию в список, снабженный ссылками numero. Не поверили временные списки. numero serГЎ ссылка на тот же список, но этот список tendrГЎ элемент mГЎs.
  • numero.extend([7]) служит для aГ±adirle mГЎs информацией в список. Он сходный с append(), но parГЎmetro, который ты перемещаешь его, вместо того, чтобы быть информацией, это другой список. Все данные об этом втором списке aГ±aden в оригинал, не делая промежуточной копии.
  • numero += [7], хотя на первый взгляд могло казаться, что он - эквивалентный numero = numero + [7], в действительности это не, потому что Пайтон конвертирует оператор += в ней operaciГіn .extend(), следовательно этот синтаксис приводит нас в предыдущий случай.

ВїQuГ© у важности есть, если он поверил, что копия помогла временно? Так как не много, так как первоначальный список немедленно исчезает, но если ты идешь в aГ±adir много элементов в список в цикле, каждый iteraciГіn цикла supondrГ - в копию первоначального списка, aГ±adido информации в копию, и ее destrucciГіn первоначального списка. Со временем это очевидно по мере того, как цикл повторяет часто. Поэтому рекомендует использовать взамен .append().

Bonus

Casi то же самое следует сказать для цепей, но с важным оттенком: цепи - неизменные , что ухудшает проблему.

, Если ты хочешь aГ±adir букву в цепь она soluciГіn интуитивная serГ - в:

cadena = cadena + letra

В этом случае, в самом деле, нет другая opciГіn, так как по отношению к существу неизменным strings , они не имеют mГ©todo .append(), ни mГ©todo .extend(). Это подразумевает tambiГ©n, что cadena += letra не может быть превращенным Пайтоном в cadena.extend(letra), потому что, как я сказал этот mГ©todo, он не существует в string. Он обращен в cadena = cadena + letra.

concatenaciГіn цепей подразумевает то же самое что в списках, а именно, она creaciГіn вспомогательной цепи, которая была бы равной оригиналу mГЎs буква aГ±adida, и ее destrucciГіn первоначальной цепи.

, Если она operaciГіn aГ±adir буквы он происходит внутри цикла, incurrirГЎ тогда в той же самой penalizaciГіn уже прокомментированная в списках. Если это проблема, и ты хочешь большую скорость, рекомендуют продолжать следующий patrГіn : Преврати первоначальную цепь в список; aГ±ade буквы в список посредством .append(), и в конце концов преврати вытекающий список снова в цепь. А именно:

cadena = "Numeros:"
lista = list(cadena)
for i in range(20):
   # Añadiremos a la lista cadenas numéricas
   lista.append(str(i))
# Convertimos la lista resultante de nuevo en cadena
cadena = "".join(lista)

В конце этого цикла цепь serГЎ: 'Numeros:012345678910111213141516171819'

0
ответ дан 19.11.2019, 22:28

В python оператор + использованный в списках функционирует как concatenador, но не изменяет operandos или аргументы.

numero = [1,2,3,4,5,6]  # crea una lista y lo asigna a la variable numero
numero + [7]  # concatena las listas numero y [7] pero no modifica los operandos

, если мы хотели, чтобы он изменил стоимость числа, нас могло бы делать это так

numero = numero + [7] # concatena las listas numero y [7] y el resultado lo asigna a la variable numero
0
ответ дан 19.11.2019, 22:28

Теги

Похожие вопросы