모든 목록 요소에서 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
'itsource' 카테고리의 다른 글
MYSQL 테이블에 새 열을 추가하는 방법 (0) | 2022.09.18 |
---|---|
핸들바 '각' 루프가 있는 부모 속성 접근 (0) | 2022.09.18 |
Java에서 Enum의 compareTo가 최종인 이유는 무엇입니까? (0) | 2022.09.18 |
{...obj1, obj2}의 정확한 기능 (0) | 2022.09.18 |
MySQL에서 배치 삽입하는 방법 (0) | 2022.09.18 |