programing

목록의 각 요소에 함수 적용

elecom 2023. 5. 3. 20:49
반응형

목록의 각 요소에 함수 적용

다음과 같은 목록이 있다고 가정합니다.

mylis = ['this is test', 'another test']

목록의 각 요소에 함수를 적용하려면 어떻게 해야 합니까?예를 들어, 어떻게 신청합니까?str.upper받는 사람:

['THIS IS TEST', 'ANOTHER TEST']

목록 이해력을 사용해 보십시오.

>>> mylis = ['this is test', 'another test']
>>> [item.upper() for item in mylis]
['THIS IS TEST', 'ANOTHER TEST']

기본 제공 표준 라이브러리 사용:

>>> mylis = ['this is test', 'another test']
>>> list(map(str.upper, mylis))
['THIS IS TEST', 'ANOTHER TEST']

Python 2.x에서는map목록의 모든 요소에 주어진 함수를 적용하여 원하는 새 목록을 구성했습니다.

Python 3.x에서는map목록 대신 반복기를 구성합니다. 따라서 에 대한list필요합니다.만약 당신이 Python 3.x를 사용하고 있고 목록이 필요하다면 목록 이해 접근법이 더 적합할 수 있습니다.

때때로 제자리에 있는 목록의 구성원에게 함수를 적용해야 합니다.다음 코드가 저에게 효과가 있었습니다.

>>> def func(a, i):
...     a[i] = a[i].lower()
>>> a = ['TEST', 'TEXT']
>>> list(map(lambda i:func(a, i), range(0, len(a))))
[None, None]
>>> print(a)
['test', 'text']

map()의 출력은 목록이 Python 3에서 변환되도록 목록 생성자에게 전달됩니다.None 값으로 채워진 반환된 목록은 무시해야 합니다. 목록 a를 제자리에서 변환하는 것이 목적이었기 때문입니다.

Python의 문자열 메소드는 최적화되어 있으므로 여기 (1, 2)의 다른 답변에서 언급한 루프 구현이 동일한 작업을 수행하는 팬더 및 numpy와 같은 다른 라이브러리의 벡터화된 메소드보다 빠르다는 것을 알게 될 것입니다.

일반적으로, 당신은 리스트 이해를 사용하여 리스트의 모든 요소에 함수를 적용할 수 있습니다.map()여기에 있는 다른 답변에서 언급한 바와 같이.예를 들어, 임의 함수가 지정된 경우func다음 중 하나를 수행할 수 있습니다.

new_list = [func(x) for x in mylis]
# or 
new_list = list(map(func, mylis))

목록을 수정하려는 경우 모든 요소를 슬라이스 할당으로 바꿀 수 있습니다.

# note that you don't need to cast `map` to a list for this assignment
# this is probably the fastest way to apply a function to a list 
mylis[:] = map(str.upper, mylis)
# or
mylis[:] = [x.upper() for x in mylis]

또는 명시적 루프가 있는 경우:

for i in range(len(mylis)):
    mylis[i] = mylis[i].upper()

각 요소에 적용할 함수를 구성하는 내장 메서드에 대한 내장 도구 연산자 라이브러리도 확인할 수 있습니다.예를 들어, 목록의 각 요소에 2를 곱하려면 다음을 사용할 수 있습니다.itertools.repeat그리고.operator.mul:

from itertools import repeat, starmap
from operator import mul

newlis1 = list(map(mul, mylis, repeat(2)))
# or with starmap
newlis2 = list(starmap(mul, zip(mylis, repeat(2))))

# but at this point, list comprehension is simpler imo
newlis3 = [x*2 for x in mylis]

언급URL : https://stackoverflow.com/questions/25082410/apply-function-to-each-element-of-a-list

반응형