@DaniSpringer Parce que vous n'assignez pas à une liste. C'est la même chose que faire lst = [1, 2, 3]; e = lst[0]; e += 1. en'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 lstne changera pas.
Błażej Michalik
Eh bien, cette réponse me ressemble beaucoup.
Daniel Springer
et le correspondant paresseux en a calculé un:new_list = (x+1 for x in my_list)
Eduardo Pignatelli
26
>>> mylist =[1,2,3]>>>[x+1for 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.
C'est bien pour changer la liste existante, mais cela en produit toujours une nouvelle. Est-il dangereux d'utiliser un générateur pour éviter la création de liste inutile? -À- dire, _list[:]=(i+1 for i in _list).
Alan
cela crée toujours une nouvelle liste, impossible de le faire en place sans une boucle for je ne pense pas
robert king
Pourquoi pensez-vous _list[:]=(i+1 for i in _list)créer une nouvelle liste?
Je vois ce que tu veux dire. Appeler la séquence temporaire une liste m'a dérouté. Savons-nous vraiment quelque chose sur son type? Ne serait-ce pas une mise en œuvre spécifique?
Alan
9
>>>[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.
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.
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 à itertoolset 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 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)
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>>> __
>>># |\ | | | |\/| |__| \ />>># | \| |__| | | | |>>>[92949596]# 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 numpyest qu'il faut toujours faire de telles manipulations avec des bibliothèques comme numpy car il est performant pour les très grands tableaux.
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 listelst
ne changera pas.new_list = (x+1 for x in my_list)
list-comprehensions python .
la source
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:
la source
map(1 .__add__, ...)
fonctionne aussi. Notez que vous avez besoin d'un espace entre1
et.
pour empêcher l'analyseur de penser qu'il s'agit d'un flottantsi vous souhaitez utiliser numpy, il existe une autre méthode comme suit
la source
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:la source
_list[:]=(i+1 for i in _list)
._list[:]=(i+1 for i in _list)
créer une nouvelle liste?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.
la source
Python 2+:
Python 3+:
la source
qui donne
la source
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.
la source
from operator import add
la source
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
etnumpy
, 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.
Production
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.la source