Wie füge ich jedem Element in einer Liste eine Ganzzahl hinzu?

135

Wie würde ich das tun, wenn ich zu jedem Element etwas list=[1,2,3]hinzufügen möchte und möchte, 1um die Ausgabe zu erhalten [2,3,4]?

Ich nehme an, ich würde eine for-Schleife verwenden, bin mir aber nicht sicher, wie.

Dennis
quelle

Antworten:

157
new_list = [x+1 for x in my_list]
Ned Batchelder
quelle
6
Dieser Vortrag erklärt es: Fakten und Mythen über Python-Namen und -Werte
Ned Batchelder
√ Tolle Infos. Augenöffnung.
Daniel Springer
3
@DaniSpringer Weil Sie keiner Liste zuweisen. Es ist das gleiche wie zu tun lst = [1, 2, 3]; e = lst[0]; e += 1. eEs 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.
Błażej Michalik
Nun, diese Antwort sieht mir sehr ähnlich.
Daniel Springer
und der Korrespondent faul berechnete einen:new_list = (x+1 for x in my_list)
Eduardo Pignatelli
26
>>> mylist = [1,2,3]
>>> [x+1 for x in mylist]
[2, 3, 4]
>>>

Listenverständnis Python .

RanRag
quelle
24

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]
Andrew Cox
quelle
7
map(1 .__add__, ...)funktioniert auch. Beachten Sie, dass Sie ein Leerzeichen zwischen 1und benötigen ., um zu verhindern, dass der Parser denkt, es sei ein Float
John La Rooy
15

Wenn Sie numpy verwenden möchten, gibt es eine andere Methode wie folgt

import numpy as np
list1 = [1,2,3]
list1 = list(np.asarray(list1) + 1)
Sushmit
quelle
13

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]
Robert King
quelle
4
Dies ist gut, um die vorhandene Liste zu ändern, es wird jedoch immer noch eine neue erstellt. Ist es irgendwie unsicher, einen Generator zu verwenden, um die unnötige Listenerstellung zu vermeiden? Dh _list[:]=(i+1 for i in _list).
Alan
das schafft immer noch eine neue liste, die ohne eine for-schleife nicht möglich ist
robert king
Warum erstellt Ihrer Meinung nach _list[:]=(i+1 for i in _list)eine neue Liste?
Alan
Ich meine, es ist vorhanden, aber vorübergehend wird eine ganz neue Liste für die Rhs erstellt. Siehe diese Antworten: stackoverflow.com/questions/4948293/… stackoverflow.com/questions/11877212/…
robert king
Ich verstehe was du meinst. Das Aufrufen der temporären Sequenz als Liste verwirrte mich. Wissen wir eigentlich etwas über seinen Typ? Wäre das nicht implementierungsspezifisch?
Alan
9
>>> [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.

Kracekumar
quelle
7

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]
satomacoto
quelle
3
import numpy as np

np.add([1, 2, 3], 1).tolist()

was gibt

[2, 3, 4]
Mark Jay
quelle
2

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]
Preetham
quelle
Woher kommt "hinzufügen"?
Hahnec
add sollte von Operatoren importieren,from operator import add
Rajith Thennakoon
0
list = [1,2,3,4,5]

for index in range(5):
      list[index] = list[index] +1

print(list)
Munchjax
quelle
0

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 itertoolsundnumpy , 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, numpyist, dass man solche Manipulationen immer mit Bibliotheken wie numpy durchführen sollte, da dies für sehr große Arrays leistungsfähig ist.

Rushikesh
quelle