Ich habe eine Liste:Wie multipliziere ich jedes Element in einer Liste mit einer Zahl?
my_list = [1, 2, 3, 4, 5]
Wie kann ich jedes Element in my_list
von 5 multiplizieren? Die Ausgabe sollte sein:
[5, 10, 15, 20, 25]
Ich habe eine Liste:Wie multipliziere ich jedes Element in einer Liste mit einer Zahl?
my_list = [1, 2, 3, 4, 5]
Wie kann ich jedes Element in my_list
von 5 multiplizieren? Die Ausgabe sollte sein:
[5, 10, 15, 20, 25]
Sie können nur eine Liste Verständnis verwenden:
my_list = [1, 2, 3, 4, 5]
my_new_list = [i * 5 for i in my_list]
>>> print(my_new_list)
[5, 10, 15, 20, 25]
Beachten Sie, dass eine Liste Verständnis eine for
Schleife zu tun, im Allgemeinen eine effizientere Art und Weise ist:
my_new_list = []
for i in my_list:
my_new_list.append(i * 5)
>>> print(my_new_list)
[5, 10, 15, 20, 25]
Als Alternative hier a Lösung mit dem beliebten Pandas-Paket:
import pandas as pd
s = pd.Series(my_list)
>>> s * 5
0 5
1 10
2 15
3 20
4 25
dtype: int64
Oder, wenn Sie nur t wollen die Liste:
>>> (s * 5).tolist()
[5, 10, 15, 20, 25]
Variablennamen, die mit Großbuchstaben beginnen, sind nicht Pythonic. Und sie sind Listen, keine Zahlen. Daher würde ich vorschlagen, 'l1' und' l2' als Variablennamen zu verwenden. –
Die Verwendung von 'l' als Variable wird ebenfalls abgeraten, da der Buchstabe 'l' und die Zahl 1 leicht zu verwechseln sind. Ich habe die Variablen in der ursprünglichen Frage des OP verwendet, und ich glaube, Ihre Bearbeitung der Frage hat mehr Schaden als Nutzen angerichtet. – Alexander
Wenn Sie meinen, dass meine Bearbeitung schlecht ist, können Sie die Frage bearbeiten, um sie zu verbessern. Wir können auch andere Variablen als 'l1' wählen, wie' l_1', 'list_1' usw. Diese sind alle besser als' Num_1'. –
from functools import partial as p
from operator import mul
map(p(mul,5),my_list)
ist ein Weg, man könnte es tun ... Ihr Lehrer wahrscheinlich eine viel weniger kompliziert Weise weiß, dass wahrscheinlich in Klasse bedeckt war
Sie können dies tun, ohne die Importanweisungen mit einem Lambda-Ausdruck zu verwenden. Außerdem gibt Ihr Auszug ein Kartenobjekt zurück, das nutzlos ist, wenn es nicht in eine Liste umgewandelt wird. Liste (Karte (Lambda x: 5 * x, Meine_Liste)). –
@ Castle-Bravo seine Nützlichkeit hängt davon ab, was Sie damit tun müssen ...Es gibt viele Möglichkeiten, diese Lösung zu erreichen (wie ich bereits erwähnt habe) –
Bitte lehre die Leute nicht, 'map' mit' lambda' zu verwenden; In dem Augenblick, in dem Sie ein "Lambda" brauchen, wäre Ihnen das Listenverständnis oder der Generatorausdruck besser gewesen. Wenn Sie schlau sind, können Sie 'map' arbeiten lassen, ohne' lambda's viel, z. In diesem Fall "map ((5) .__ mul__, my_list)", obwohl in diesem speziellen Fall, dank einiger Optimierungen im Byte-Code-Interpreter für einfache "int" -Mathe, "[x * 5 für x in my_list]" ist schneller, sowie mehr Pythonic und einfacher. – ShadowRanger
Da ich Sie denken, sind neu bei Python, machen Sie den langen Weg, iterieren Sie durch Ihre Liste mit for-Schleife und multiplizieren und fügen Sie jedes Element an eine neue Liste an.
for-Schleife
lst = [5, 20 ,15]
product = []
for i in lst:
product.append(i*5)
print product
Liste Verständnis verwendet, ist dies auch gleich wie bei-Schleife, aber mehr 'pythonic'
lst = [5, 20 ,15]
prod = [i * 5 for i in lst]
print prod
Wie ist der "lange Weg" in irgendeiner Weise besser? Es ist länger - also schwieriger zu lesen - und nicht einfacher zu schreiben. – lirtosiast
Okay, vielleicht hast du den falschen Eindruck auf meinen Titel bekommen und ich habe nie gesagt, dass es besser wäre, ich versuche nur, ihm zu zeigen, wie ich es ohne Verständnis machen kann. weil ich aufgrund meiner erfahrung, als ich neu in python war, nicht in der lage war, den verständnisbegriff leicht zu verstehen. – essramos
Oh, okay. Ich kann mich nicht direkt darauf beziehen, weil ich mit funktionalen Sprachen angefangen habe. – lirtosiast
Sie es wie so an Ort und Stelle tun:
l = [1, 2, 3, 4, 5]
l[:] = [x * 5 for x in l]
Dies erfordert keine zusätzlichen Importe und ist sehr pythonisch.
Außerdem: Das Konzept heißt _list comprehension_, wenn Sie mehr Informationen darüber suchen möchten. – Michael
Ein Numpy Ansatz für längere Listen:
>>> import numpy as np
>>>
>>> my_list = np.array([1, 2, 3, 4, 5])
>>>
>>> my_list * 5
array([ 5, 10, 15, 20, 25])
Mit Karte (nicht so gut, aber eine andere Herangehensweise an das Problem):
def timesfive(number): return number*5
list(map(timesfive,[5, 10, 15, 20, 25]))
Beste Weg ist, Listenverständnis zu verwenden:
def map_to_list(my_list, n):
# multiply every value in my_list by n
# Use list comprehension!
my_new_list = [i * n for i in my_list]
return my_new_list
# To test:
print(map_to_list([1,2,3], -1))
Rückgabe: [-1, -2, -3]
Verwenden von 'map' ist besser als' for-loop'. – Tony
[Und Listenverständnis ist (fast immer) besser als 'map'] (https://stackoverflow.com/questions/1247486/python-list-comprehension-vs-map) (und immer besser, wenn' map' ein a erfordern würde 'Lambda'). – ShadowRanger