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.

Antworten:


157
new_list = [x+1 for x in my_list]

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


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]

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)

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]

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.


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]

3
import numpy as np

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

was gibt

[2, 3, 4]

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]

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)

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.