[python] 목록의 각 요소에 숫자를 어떻게 곱합니까?

목록이 있습니다.

my_list = [1, 2, 3, 4, 5]

각 요소에 my_list5를 어떻게 곱할 수 있습니까? 출력은 다음과 같아야합니다.

[5, 10, 15, 20, 25]



답변

목록 이해력을 사용할 수 있습니다.

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]

목록 이해는 일반적으로 for루프 를 수행하는 더 효율적인 방법입니다 .

my_new_list = []
for i in my_list:
    my_new_list.append(i * 5)

>>> print(my_new_list)
[5, 10, 15, 20, 25]

대안으로 다음은 인기있는 Pandas 패키지를 사용하는 솔루션입니다.

import pandas as pd

s = pd.Series(my_list)

>>> s * 5
0     5
1    10
2    15
3    20
4    25
dtype: int64

또는 목록 만 원하는 경우 :

>>> (s * 5).tolist()
[5, 10, 15, 20, 25]


답변

엄청나게 빠른 접근 방식은 목록을 반복하는 대신 벡터화 된 방식으로 곱셈을 수행하는 것입니다. Numpy는 이미 사용할 수있는 매우 간단하고 편리한 방법을 제공했습니다.

>>> import numpy as np
>>> 
>>> my_list = np.array([1, 2, 3, 4, 5])
>>> 
>>> my_list * 5
array([ 5, 10, 15, 20, 25])

이것은 Python의 기본 목록에서 작동하지 않습니다. 목록에 숫자를 곱하면 해당 숫자의 크기로 항목을 반복합니다.

In [15]: my_list *= 1000

In [16]: len(my_list)
Out[16]: 5000

목록 이해를 사용하는 순수한 Python 기반 접근 방식을 원한다면 기본적으로 가장 Pythonic 방법입니다.

In [6]: my_list = [1, 2, 3, 4, 5]

In [7]: [5 * i for i in my_list]
Out[7]: [5, 10, 15, 20, 25]

목록 이해 외에도 순수한 기능적 접근 방식 map()으로 다음과 같이 내장 함수를 사용할 수도 있습니다 .

In [10]: list(map((5).__mul__, my_list))
Out[10]: [5, 10, 15, 20, 25]

이 코드는 my_listto 5__mul__메서드 내의 모든 항목을 전달 하고 반복기 같은 객체 (python-3.x)를 반환합니다. 그런 다음 list()내장 함수를 사용하여 반복기를 목록으로 변환 할 수 있습니다 (Python-2.x map에서는 기본적으로 목록을 반환 하므로 필요하지 않음 ).

벤치 마크 :

In [18]: %timeit [5 * i for i in my_list]
463 ns ± 10.6 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [19]: %timeit list(map((5).__mul__, my_list))
784 ns ± 10.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [20]: %timeit [5 * i for i in my_list * 100000]
20.8 ms ± 115 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [21]: %timeit list(map((5).__mul__, my_list * 100000))
30.6 ms ± 169 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)


In [24]: arr = np.array(my_list * 100000)

In [25]: %timeit arr * 5
899 µs ± 4.98 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)


답변

다음과 같이 제자리에서 할 수 있습니다.

 l = [1, 2, 3, 4, 5]
 l[:] = [x * 5 for x in l]

이것은 추가 수입이 필요하지 않으며 매우 비단뱀입니다.


답변

나는 당신이 Python을 처음 사용한다고 생각하므로 먼 길을 택하고 for 루프를 사용하여 목록을 반복하고 각 요소를 새 목록에 곱하고 추가하십시오.

for 루프 사용

lst = [5, 20 ,15]
product = []
for i in lst:
    product.append(i*5)
print product

목록 이해력을 사용하면 for 루프를 사용하는 것과 동일하지만 더 ‘pythonic’

lst = [5, 20 ,15]

prod = [i * 5 for i in lst]
print prod


답변

지도 사용 (좋지는 않지만 문제에 대한 또 다른 접근 방식) :

list(map(lambda x: x*5,[5, 10, 15, 20, 25]))

또한 numpy 또는 numpy 배열을 사용하는 경우 다음을 사용할 수 있습니다.

import numpy as np
list(np.array(x) * 5)


답변

from functools import partial as p
from operator import mul
map(p(mul,5),my_list)

당신이 할 수있는 한 가지 방법입니다 … 당신의 선생님 은 아마도 수업에서 다루었던 훨씬 덜 복잡한 방법을 알고 있을 것입니다.


답변

각 요소에 다음 my_list을 곱합니다 k.

k = 5
my_list = [1,2,3,4]
result = list(map(lambda x: x * k, my_list))

를 야기하는: [5, 10, 15, 20]