@DaniSpringer Porque você não está atribuindo a uma lista. É o mesmo que fazer lst = [1, 2, 3]; e = lst[0]; e += 1. enão possui nenhuma informação sobre a origem, é apenas uma variável à qual um elemento de uma lista foi atribuído. Depois de atribuir algo a ele, a lista lstnão será alterada.
Błażej Michalik
Bem, esta resposta é muito parecida comigo.
Daniel Springer
e o correspondente preguiçoso calculou um:new_list = (x+1 for x in my_list)
Eduardo Pignatelli 14/09
26
>>> mylist =[1,2,3]>>>[x+1for x in mylist][2,3,4]>>>
As outras respostas na compreensão da lista são provavelmente a melhor aposta para uma adição simples, mas se você tiver uma função mais complexa que precisa aplicar a todos os elementos, o mapa poderá ser uma boa opção.
Isso é bom para alterar a lista existente, mas ainda produz uma nova. De alguma forma, é inseguro usar um gerador para evitar a criação desnecessária de listas? Ou seja _list[:]=(i+1 for i in _list),.
2077 Alan
que ainda cria uma nova lista, não é possível fazê-lo no local sem um loop for, eu não acho
robert king
Por que você acha que _list[:]=(i+1 for i in _list)cria uma nova lista?
Eu vejo o que você quer dizer. Chamar a sequência temporária de lista me confundiu. Realmente sabemos alguma coisa sobre esse tipo? Isso não seria específico da implementação?
Alan
9
>>>[x.__add__(1)for x in[1,3,5]]3:[2,4,6]
Minha intenção aqui é expor se o item na lista é um número inteiro que suporta várias funções internas.
Muitas das respostas acima são muito boas. Eu também vi algumas respostas estranhas que farão o trabalho. Além disso, a última resposta vista foi através de um loop normal. Esta vontade de dar respostas me leva a itertoolse numpy, o que irá fazer o mesmo trabalho de uma maneira diferente.
Aqui apresento maneiras diferentes de fazer o trabalho, não respondidas acima.
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)
Resultado
>>><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)
Meu único motivo para destacar o uso de numpyé que sempre devemos fazer essas manipulações com bibliotecas como numpy, pois é eficiente em termos de desempenho para matrizes muito grandes.
lst = [1, 2, 3]; e = lst[0]; e += 1
.e
não possui nenhuma informação sobre a origem, é apenas uma variável à qual um elemento de uma lista foi atribuído. Depois de atribuir algo a ele, a listalst
não será alterada.new_list = (x+1 for x in my_list)
python de compreensão de lista .
fonte
As outras respostas na compreensão da lista são provavelmente a melhor aposta para uma adição simples, mas se você tiver uma função mais complexa que precisa aplicar a todos os elementos, o mapa poderá ser uma boa opção.
No seu exemplo, seria:
fonte
map(1 .__add__, ...)
funciona também Note que você precisa de um espaço entre1
e.
para impedir que o pensamento analisador é um floatse você quiser usar numpy, existe outro método, como a seguir
fonte
Editar: este não está no local
Em primeiro lugar, não use a palavra 'lista' para sua variável. Sombreia a palavra-chave
list
.A melhor maneira é fazê-lo no lugar usando emendas; observe que
[:]
denota uma emenda:fonte
_list[:]=(i+1 for i in _list)
,._list[:]=(i+1 for i in _list)
cria uma nova lista?Minha intenção aqui é expor se o item na lista é um número inteiro que suporta várias funções internas.
fonte
Python 2+:
Python 3+:
fonte
que dá
fonte
Me deparei com uma maneira não tão eficiente, mas única de fazê-lo. Então, compartilhe-o. Sim, ele exige espaço extra para outra lista.
fonte
from operator import add
fonte
Muitas das respostas acima são muito boas. Eu também vi algumas respostas estranhas que farão o trabalho. Além disso, a última resposta vista foi através de um loop normal. Esta vontade de dar respostas me leva a
itertools
enumpy
, o que irá fazer o mesmo trabalho de uma maneira diferente.Aqui apresento maneiras diferentes de fazer o trabalho, não respondidas acima.
Resultado
Meu único motivo para destacar o uso de
numpy
é que sempre devemos fazer essas manipulações com bibliotecas como numpy, pois é eficiente em termos de desempenho para matrizes muito grandes.fonte