2016-02-03 5 views
17

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] 
+2

Verwenden von 'map' ist besser als' for-loop'. – Tony

+6

[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

Antwort

33

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] 
+0

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. –

+2

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

+1

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'. –

3
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

+0

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)). –

+0

@ 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) –

+1

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

6

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 
+0

Wie ist der "lange Weg" in irgendeiner Weise besser? Es ist länger - also schwieriger zu lesen - und nicht einfacher zu schreiben. – lirtosiast

+1

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

+0

Oh, okay. Ich kann mich nicht direkt darauf beziehen, weil ich mit funktionalen Sprachen angefangen habe. – lirtosiast

9

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.

+0

Außerdem: Das Konzept heißt _list comprehension_, wenn Sie mehr Informationen darüber suchen möchten. – Michael

4

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]) 
0

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])) 
0

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]

Verwandte Themen