목록이 있습니다.
my_list = [1, 2, 3, 4, 5]
각 요소에 my_list
5를 어떻게 곱할 수 있습니까? 출력은 다음과 같아야합니다.
[5, 10, 15, 20, 25]
목록이 있습니다.
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]
l1
및 사용을 제안합니다 l2
.
l1
등 l_1
, list_1
이 모든보다 나은 등, Num_1
.
엄청나게 빠른 접근 방식은 목록을 반복하는 대신 벡터화 된 방식으로 곱셈을 수행하는 것입니다. 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]
이것은 추가 수입이 필요하지 않으며 매우 비단뱀입니다.
l = [x * 5 for x in l]
끝났다 l[:] = [x * 5 for x in l]
. 후자는 새 목록을 만든 다음 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)
당신이 할 수있는 한 가지 방법입니다 ... 당신의 선생님 은 아마도 수업에서 다루었던 훨씬 덜 복잡한 방법을 알고 있을 것입니다.
map
함께 사용하도록 사람들을 가르치지 마십시오 lambda
. 를 필요로하는 즉시 lambda
목록 이해 또는 생성기 표현식을 사용하는 것이 좋습니다. 당신이 영리하다면, 당신 은 할 수 있습니다 있도록 map
없이 작업 lambda
이 경우, SA의 예를 들어, 많은을 map((5).__mul__, my_list)
, 특히이 경우, 간단한의 바이트 코드 인터프리터의 일부 최적화 덕분에 비록 int
수학, [x * 5 for x in my_list]
빠른뿐만 아니라, 인 더 파이썬 간단 .
가장 좋은 방법은 목록 이해력을 사용하는 것입니다.
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))
반환 : [-1, -2, -3]
map
것이for-loop
.