목록이 있습니다.
my_list = [1, 2, 3, 4, 5]
각 요소에 my_list
5를 어떻게 곱할 수 있습니까? 출력은 다음과 같아야합니다.
[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_list
to 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]
