[PYTHON] 모든 목록 요소에서 int () 함수를 호출 하시겠습니까?
PYTHON모든 목록 요소에서 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;
너무 못생긴가? 한 줄의 코드에서이 작업을 수행하는 더 파이썬적인 방법이 있다고 확신합니다. 제발 도와주세요.
해결법
-
==============================
1.다음은 목록의 이해를위한 것입니다.
다음은 목록의 이해를위한 것입니다.
numbers = [ int(x) for x in numbers ]
-
==============================
2.파이썬 2.x에서 또 다른 접근법은 map을 사용하는 것입니다 :
파이썬 2.x에서 또 다른 접근법은 map을 사용하는 것입니다 :
numbers = map(int, numbers)
참고 : Python 3.x map은 원하는 경우 목록으로 변환 할 수있는지도 객체를 반환합니다.
numbers = list(map(int, numbers))
-
==============================
3.단지 요점,
단지 요점,
numbers = [int(x) for x in numbers]
목록 이해력은 더욱 자연스럽지 만
numbers = map(int, numbers)
가 더 빠르다.
아마도 이것은 대부분의 경우 중요하지 않습니다.
유용한 읽기 : LP 대지도
-
==============================
4.이러한 정수를 함수 또는 메소드에 전달하려는 경우 다음 예제를 고려하십시오.
이러한 정수를 함수 또는 메소드에 전달하려는 경우 다음 예제를 고려하십시오.
sum(int(x) for x in numbers)
이 구성은 adamk에서 언급 한 목록 내포와 의도적으로 매우 유사합니다. 대괄호가 없으면 생성자 표현식이라고하며 메서드에 인수 목록을 전달하는 매우 메모리 효율적인 방법입니다. 여기서는 좋은 토론을 할 수 있습니다 : Generator Expressions vs. List Comprehension
-
==============================
5.또 다른 방법,
또 다른 방법,
for i, v in enumerate(numbers): numbers[i] = int(v)
-
==============================
6.파이썬 3에서 만드는 또 다른 방법은 다음과 같습니다.
파이썬 3에서 만드는 또 다른 방법은 다음과 같습니다.
numbers = [* map (int, numbers)]
-
==============================
7.답변을 통합하고 시간 분석 결과를 보여 주겠다고 생각했습니다.
답변을 통합하고 시간 분석 결과를 보여 주겠다고 생각했습니다.
파이썬 2는 이것에 꽤 나쁘지만 맵핑은 이해력보다 약간 빠릅니다.
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
파이썬 3은 4 배 이상 빨라졌지만 맵 제너레이터 객체를리스트로 변환하는 것은 여전히 이해력보다 빠르며 맵 생성기의 압축을 풀어서 목록을 만드는 것 (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
참고 : 파이썬 3에서 4 요소는 크로스 오버 포인트 (파이썬 2에서는 3)로 보입니다. 이해력은 약간 빠르지 만 생성기를 푸는 것은 여전히 하나 이상의 요소가있는 목록보다 빠릅니다.
from https://stackoverflow.com/questions/3371269/call-int-function-on-every-list-element by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 평면 목록에 중복 된 항목이 있는지 어떻게 확인합니까? (0) | 2018.10.10 |
---|---|
[PYTHON] 어떻게 파이썬을 사용하여 SQLite에 행을 삽입 한 후 삽입 된 ID를 검색 할 수 있습니까? (0) | 2018.10.10 |
[PYTHON] stdin에서 암호 읽기 (0) | 2018.10.10 |
[PYTHON] 문자열이 목록의 문자열 중 하나로 끝나는 지 확인하십시오. (0) | 2018.10.10 |
[PYTHON] 파이썬의 분산 형 플롯 및 색상 매핑 (0) | 2018.10.10 |