Antworten:
new_list = [x+1 for x in my_list]
lst = [1, 2, 3]; e = lst[0]; e += 1
. e
Es gibt keine Informationen darüber, woher es stammt. Es ist lediglich eine Variable, der ein Element einer Liste zugewiesen wurde. Nachdem Sie ihm etwas anderes zugewiesen haben, lst
ändert sich die Liste nicht.
new_list = (x+1 for x in my_list)
>>> mylist = [1,2,3]
>>> [x+1 for x in mylist]
[2, 3, 4]
>>>
Die anderen Antworten zum Listenverständnis sind wahrscheinlich die beste Wahl für eine einfache Hinzufügung. Wenn Sie jedoch eine komplexere Funktion haben, die Sie auf alle Elemente anwenden müssen, ist die Karte möglicherweise eine gute Lösung.
In Ihrem Beispiel wäre es:
>>> map(lambda x:x+1, [1,2,3])
[2,3,4]
map(1 .__add__, ...)
funktioniert auch. Beachten Sie, dass Sie ein Leerzeichen zwischen 1
und benötigen .
, um zu verhindern, dass der Parser denkt, es sei ein Float
Bearbeiten: Dies ist nicht vorhanden
Verwenden Sie zunächst nicht das Wort "Liste" für Ihre Variable. Es schattiert das Schlüsselwort list
.
Der beste Weg ist, dies durch Spleißen zu tun. Beachten Sie, dass es sich um [:]
einen Spleiß handelt:
>>> _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)
eine neue Liste?
>>> [x.__add__(1) for x in [1, 3, 5]]
3: [2, 4, 6]
Ich möchte hier offenlegen, ob das Element in der Liste eine Ganzzahl ist, die verschiedene integrierte Funktionen unterstützt.
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]
Kam auf eine nicht so effiziente, aber einzigartige Art und Weise. Und ja, es erfordert zusätzlichen Speicherplatz für eine andere 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
Viele der obigen Antworten sind sehr gut. Ich habe auch einige seltsame Antworten gesehen, die den Job machen werden. Die letzte Antwort war eine normale Schleife. Diese Bereitschaft, Antworten zu geben, führt mich zu itertools
undnumpy
, die den gleichen Job auf andere Weise erledigen.
Hier stelle ich verschiedene Möglichkeiten vor, um die Arbeit zu erledigen, die oben nicht beantwortet wurden.
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)
Ausgabe
>>> <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)
Mein einziger Grund, die Verwendung von hervorzuheben, numpy
ist, dass man solche Manipulationen immer mit Bibliotheken wie numpy durchführen sollte, da dies für sehr große Arrays leistungsfähig ist.