sourcetip

목록의 각 요소에 숫자를 곱하려면 어떻게 해야 합니까?

fileupload 2023. 5. 8. 22:24
반응형

목록의 각 요소에 숫자를 곱하려면 어떻게 해야 합니까?

목록이 있습니다.

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]

대안으로 인기 있는 Panda 패키지를 사용하는 솔루션이 있습니다.

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]

마지막으로 사용할 수 있습니다.map비록 이것은 일반적으로 눈살을 찌푸리게 하지만.

my_new_list = map(lambda x: x * 5, my_list)

사용.map그러나 일반적으로 효율성이 떨어집니다.이 질문에 대한 삭제된 답변에 대한 ShadowRanger의 의견에 따라:

"아무도" 사용하지 않는 이유는 일반적으로 성능 비관적이기 때문입니다.고려할 가치가 있는 유일한 시간은mapCython에서 C에 구현된 내장 함수를 매핑 함수로 사용하는 경우입니다. 그렇지 않으면,mapPythonic list comp 또는 genexpr과 같거나 더 느리게 실행될 것입니다(또한 그들이 게으른 생성자인지 아니면 열망하는지에 대해서도 더 명확합니다).list크리에이터; 파이3에서, 당신의 코드는 랩핑 없이는 작동하지 않을 것입니다.map을 불러들입니다list) 를 사용하는 경우map와 함께lambda기능, 멈춰요, 당신이 잘못하고 있어요.

그리고 그의 또 다른 댓글 중 하나가 이 답변에 게시되었습니다.

제발 사람들에게 사용법을 가르치지 마세요.map와 함께lambda당신이 필요로 하는 순간lambda목록 이해나 생성자 표현이 더 좋았을 것입니다.네가 똑똑하다면, 너는 만들 수 있어.map없이 일하다lambda많이요, 예를 들어 이 경우에는map((5).__mul__, my_list)비록 이 특별한 경우에, 바이트 코드 인터프리터의 일부 최적화 덕분에 단순합니다.int수학,[x * 5 for x in my_list]더 빠르고 더 단순할 뿐만 아니라 더 빠릅니다.

엄청나게 빠른 접근법은 목록을 반복하는 대신 벡터화된 방식으로 곱셈을 수행하는 것입니다.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

만약 당신이 목록 이해를 사용하는 순수한 파이썬 기반 접근법을 원한다면 기본적으로 가장 파이썬적인 방법입니다.

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_list5__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]

이것은 추가적인 가져오기가 필요하지 않으며 매우 단순합니다.

당신이 파이썬을 처음 사용하는 것 같으니, 먼 길을 가서 루프와 곱셈을 사용하여 목록을 반복하고 각 요소를 새 목록에 추가합니다.

루프에 사용

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

리스트 이해를 사용하여, 이것은 또한 for-loop을 사용하는 것과 같지만 더 '전자적'입니다.

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]

하나의 객체 이름으로 목록 이해 또는 맵을 사용하는 것이 흥미로웠습니다. x가 재할당될 때마다 ID(x)가 변경됩니다. 즉, 다른 객체를 가리킵니다.

x = [1, 2, 3]
id(x)
2707834975552
x = [1.5 * x for x in x]
id(x)
2707834976576
x
[1.5, 3.0, 4.5]
list(map(lambda x : 2 * x / 3, x))
[1.0, 2.0, 3.0]
id(x) # not reassigned
2707834976576
x = list(map(lambda x : 2 * x / 3, x))
x
[1.0, 2.0, 3.0]
id(x)
2707834980928
var1 = [2,4,6,8,10,12]

#for Integer multiplier us   int(x).__mull__ with map    
var2 = list( map(int(2).__mul__,var1 ))
#for float multiplier
var2 = list( map(float(2.5).__mul__,var1 ))

가장 좋은 방법은 목록 이해력을 사용하는 것입니다.

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]

언급URL : https://stackoverflow.com/questions/35166633/how-do-i-multiply-each-element-in-a-list-by-a-number

반응형