@DaniSpringer Потому что вы не назначаете список. Это то же самое, что и делать lst = [1, 2, 3]; e = lst[0]; e += 1. eне имеет никакой информации о том, откуда он появился, это просто переменная, которой был назначен элемент списка. После назначения ему чего-то еще список lstне изменится.
Błażej Michalik
Что ж, этот ответ мне очень похож.
Дэниел Спрингер,
и корреспондент ленивый вычислил один:new_list = (x+1 for x in my_list)
Эдуардо Пиньятелли
26
>>> mylist =[1,2,3]>>>[x+1for x in mylist][2,3,4]>>>
Другие ответы на понимание списка, вероятно, являются лучшим выбором для простого добавления, но если у вас есть более сложная функция, которую вам нужно применить ко всем элементам, тогда карта может подойти.
map(1 .__add__, ...)тоже работает Обратите внимание, что вам нужен пробел между 1и, .чтобы синтаксический анализатор не подумал, что это число с плавающей запятой
Джон Ла Рой,
15
если вы хотите использовать numpy, есть другой метод следующим образом
import numpy as np
list1 =[1,2,3]
list1 = list(np.asarray(list1)+1)
Это хорошо для изменения существующего списка, но при этом создается новый. Насколько небезопасно использовать генератор, чтобы избежать создания ненужного списка? Т.е., _list[:]=(i+1 for i in _list).
Алан
который по-прежнему создает новый список, невозможно сделать это на месте без цикла for, я не думаю,
Роберт Кинг
Как вы думаете, почему _list[:]=(i+1 for i in _list)создается новый список?
Я понимаю что ты имеешь ввиду. Назвав временную последовательность списком, я смутился. Знаем ли мы что-нибудь о его типе? Разве это не было бы конкретной реализацией?
Алан
9
>>>[x.__add__(1)for x in[1,3,5]]3:[2,4,6]
Я намерен здесь показать, является ли элемент в списке целым числом, он поддерживает различные встроенные функции.
Наткнулся на не очень эффективный, но уникальный способ сделать это. Так что поделитесь им. И да, это требует дополнительного места для другого списка.
Многие из приведенных выше ответов очень хороши. Я также видел несколько странных ответов, которые помогут. Кроме того, последний полученный ответ был через обычный цикл. Эта готовность давать ответы приводит меня кitertools и numpy, которые будут выполнять ту же работу по-другому.
Здесь я представляю различные способы выполнения работы, на которые не ответили выше.
import operator
import itertools
x =[3,5,6,7]
integer =89"""
Want more vairaint can also use zip_longest from itertools instead just zip
"""#lazy eval
a = itertools.starmap(operator.add, zip(x,[89]* len(x)))# this is not subscriptable but iterableprint(a)for i in a:print(i, end =",")# prepared list
a = list(itertools.starmap(operator.add, zip(x,[89]* len(x))))# this returns listprint(a)# With numpy (before this, install numpy if not present with `pip install numpy`)import numpy
res = numpy.ones(len(x), dtype=int)* integer + x # it returns numpy array
res = numpy.array(x)+ integer # you can also use this, infact there are many ways to play aroundprint(res)print(res.shape)# prints structure of array, i.e. shape# if you specifically want a list, then use tolist
res_list = res.tolist()print(res_list)
Вывод
>>><itertools.starmap object at 0x0000028793490AF0># output by lazy val>>>92,94,95,96,# output of iterating above starmap object>>>[92,94,95,96]# output obtained by casting to list>>> __
>>># |\ | | | |\/| |__| \ />>># | \| |__| | | | |>>>[92949596]# this is numpy.ndarray object>>>(4,)# shape of array>>>[92,94,95,96]# this is a list object (doesn't have a shape)
Моя единственная причина , чтобы подчеркнуть использование в numpyтом , что всегда нужно делать такие манипуляции с библиотеками , как NumPy , потому что производительность эффективна для очень больших массивов.
lst = [1, 2, 3]; e = lst[0]; e += 1
.e
не имеет никакой информации о том, откуда он появился, это просто переменная, которой был назначен элемент списка. После назначения ему чего-то еще списокlst
не изменится.new_list = (x+1 for x in my_list)
список-понимание Python .
источник
Другие ответы на понимание списка, вероятно, являются лучшим выбором для простого добавления, но если у вас есть более сложная функция, которую вам нужно применить ко всем элементам, тогда карта может подойти.
В вашем примере это будет:
источник
map(1 .__add__, ...)
тоже работает Обратите внимание, что вам нужен пробел между1
и,.
чтобы синтаксический анализатор не подумал, что это число с плавающей запятойесли вы хотите использовать numpy, есть другой метод следующим образом
источник
Изменить: это не на месте
Во-первых, не используйте слово «список» для своей переменной. Он затеняет ключевое слово
list
.Лучше всего сделать это на месте, используя сращивание, обратите внимание, что это
[:]
означает сращивание:источник
_list[:]=(i+1 for i in _list)
._list[:]=(i+1 for i in _list)
создается новый список?Я намерен здесь показать, является ли элемент в списке целым числом, он поддерживает различные встроенные функции.
источник
Python 2+:
Python 3+:
источник
который дает
источник
Наткнулся на не очень эффективный, но уникальный способ сделать это. Так что поделитесь им. И да, это требует дополнительного места для другого списка.
источник
from operator import add
источник
Многие из приведенных выше ответов очень хороши. Я также видел несколько странных ответов, которые помогут. Кроме того, последний полученный ответ был через обычный цикл. Эта готовность давать ответы приводит меня к
itertools
иnumpy
, которые будут выполнять ту же работу по-другому.Здесь я представляю различные способы выполнения работы, на которые не ответили выше.
Вывод
Моя единственная причина , чтобы подчеркнуть использование в
numpy
том , что всегда нужно делать такие манипуляции с библиотеками , как NumPy , потому что производительность эффективна для очень больших массивов.источник