Réponses:
new_list = [x+1 for x in my_list]
lst = [1, 2, 3]; e = lst[0]; e += 1
. e
n'a aucune information sur son origine, c'est juste une variable à laquelle un élément d'une liste a été assigné. Après avoir assigné quelque chose d'autre, la liste lst
ne changera pas.
new_list = (x+1 for x in my_list)
>>> mylist = [1,2,3]
>>> [x+1 for x in mylist]
[2, 3, 4]
>>>
Les autres réponses sur la compréhension des listes sont probablement le meilleur pari pour une addition simple, mais si vous avez une fonction plus complexe que vous deviez appliquer à tous les éléments, la carte peut être un bon choix.
Dans votre exemple, ce serait:
>>> map(lambda x:x+1, [1,2,3])
[2,3,4]
map(1 .__add__, ...)
fonctionne aussi. Notez que vous avez besoin d'un espace entre 1
et .
pour empêcher l'analyseur de penser qu'il s'agit d'un flottant
Edit: ce n'est pas en place
Tout d'abord, n'utilisez pas le mot «liste» pour votre variable. Cela fait de l'ombre au mot-clé list
.
Le meilleur moyen est de le faire en place en utilisant l'épissage, notez que le [:]
désigne une épissure:
>>> _list=[1,2,3]
>>> _list[:]=[i+1 for i in _list]
>>> _list
[2, 3, 4]
_list[:]=(i+1 for i in _list)
.
_list[:]=(i+1 for i in _list)
créer une nouvelle liste?
>>> [x.__add__(1) for x in [1, 3, 5]]
3: [2, 4, 6]
Mon intention ici est d'exposer si l'élément de la liste est un entier, il prend en charge diverses fonctions intégrées.
Python 2+:
>>> mylist = [1,2,3]
>>> map(lambda x: x + 1, mylist)
[2, 3, 4]
Python 3+:
>>> mylist = [1,2,3]
>>> list(map(lambda x: x + 1, mylist))
[2, 3, 4]
Je suis tombé sur une façon pas si efficace, mais unique de le faire. Donc, le partager entre tous Et oui, cela nécessite un espace supplémentaire pour une autre liste.
from operator import add
test_list1 = [4, 5, 6, 2, 10]
test_list2 = [1] * len(test_list1)
res_list = list(map(add, test_list1, test_list2))
print(test_list1)
print(test_list2)
print(res_list)
#### Output ####
[4, 5, 6, 2, 10]
[1, 1, 1, 1, 1]
[5, 6, 7, 3, 11]
from operator import add
Bon nombre des réponses ci-dessus sont très bonnes. J'ai également vu des réponses étranges qui feront l'affaire. En outre, la dernière réponse vue était par une boucle normale. Cette volonté de donner des réponses m'amène à itertools
et numpy
, qui fera le même travail d'une manière différente.
Ici, je présente différentes façons de faire le travail, sans réponse ci-dessus.
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 iterable
print(a)
for i in a:
print(i, end = ",")
# prepared list
a = list(itertools.starmap(operator.add, zip(x, [89] * len(x)))) # this returns list
print(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 around
print(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)
Production
>>> <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
>>> __
>>> # |\ | | | |\/| |__| \ /
>>> # | \| |__| | | | |
>>> [92 94 95 96] # this is numpy.ndarray object
>>> (4,) # shape of array
>>> [92, 94, 95, 96] # this is a list object (doesn't have a shape)
Ma seule raison de souligner l'utilisation de numpy
est qu'il faut toujours faire de telles manipulations avec des bibliothèques comme numpy car il est performant pour les très grands tableaux.