itsource

모든 목록 요소에서 int() 함수를 호출하시겠습니까?

mycopycode 2022. 9. 18. 10:20
반응형

모든 목록 요소에서 int() 함수를 호출하시겠습니까?

다음과 같은 숫자 문자열이 포함된 목록이 있습니다.

numbers = ['1', '5', '10', '8'];

다음과 같이 모든 목록 요소를 정수로 변환합니다.

numbers = [1, 5, 10, 8];

루프를 사용하여 다음과 같이 할 수 있습니다.

new_numbers = [];
for n in numbers:
    new_numbers.append(int(n));
numbers = new_numbers;

꼭 그렇게 못생겨야 해요?나는 이것을 한 줄의 코드로 할 수 있는 더 많은 버마적인 방법이 있다고 확신한다.제발 도와주세요.

목록 압축의 목적은 다음과 같습니다.

numbers = [ int(x) for x in numbers ]

Python 2.x에서는 다음 방법을 사용합니다.

numbers = map(int, numbers)

주의: Python 3.x에서는 맵 오브젝트를 반환하고, 원하는 경우 목록으로 변환할 수 있습니다.

numbers = list(map(int, numbers))

딱 한 가지 점만

numbers = [int(x) for x in numbers]

리스트의 이해는 보다 자연스러운 반면,

numbers = map(int, numbers)

더 빠릅니다.

아마 이것은 대부분의 경우 문제가 되지 않을 것이다.

참고 자료: LP vs 지도

이러한 정수를 함수 또는 메서드에 전달할 경우 다음 예를 고려하십시오.

sum(int(x) for x in numbers)

이 구성은 의도적으로 Adamk가 언급한 목록 포괄과 유사합니다.대괄호가 없으면 생성기 식이라고 불리며 인수 목록을 메서드에 전달하는 매우 효율적인 방법입니다.여기서는 제너레이터 표현식 vs.에 대해 설명하겠습니다. 리스트의 이해

Python 3에서 만드는 또 다른 방법:

numbers = [*map(int, numbers)]

그러나 이상적으로는 지도만으로 만족할 수 있습니다.지도는 반복기를 반환하기 때문입니다.

numbers = map(int, numbers)

또 다른 방법으로는

for i, v in enumerate(numbers): numbers[i] = int(v)

답을 종합해서 보여줘야겠다고 생각했어요.timeit결과.

Python 2는 형편없지만map이해력보다 조금 더 빠르죠.

Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import timeit
>>> setup = """import random
random.seed(10)
l = [str(random.randint(0, 99)) for i in range(100)]"""
>>> timeit.timeit('[int(v) for v in l]', setup)
116.25092001434314
>>> timeit.timeit('map(int, l)', setup)
106.66044823117454

Python 3는 그 자체로는 4배 이상 빠르지만, Python 3의 변환은map목록 생성기 개체는 여전히 이해보다 빠릅니다. 또한 목록 생성 시 패키징을 해제하여 목록을 만듭니다.map발전기(고마워 Artem!)가 여전히 약간 더 빠릅니다.

Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import timeit
>>> setup = """import random
random.seed(10)
l = [str(random.randint(0, 99)) for i in range(100)]"""
>>> timeit.timeit('[int(v) for v in l]', setup)
25.133059591551955
>>> timeit.timeit('list(map(int, l))', setup)
19.705547827217515
>>> timeit.timeit('[*map(int, l)]', setup)
19.45838406513076

주의: Python 3에서는 4개의 요소가 크로스 포인트(Python 2에서는 3개)인 것 같습니다.단, 제너레이터의 언팩은 2개 이상의 요소가 있는 리스트보다 빠릅니다.

NumPy는 어레이를 작성할 때 다음과 같은 작업을 즉시 수행합니다.

import numpy as np

numbers = ['1', '5', '10', '8']
numbers = np.array(numbers,
                   dtype=int)
numbers
array([ 1,  5, 10,  8])

언급URL : https://stackoverflow.com/questions/3371269/call-int-function-on-every-list-element

반응형