복붙노트

[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. ==============================

    1.다음은 목록의 이해를위한 것입니다.

    다음은 목록의 이해를위한 것입니다.

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

    2.파이썬 2.x에서 또 다른 접근법은 map을 사용하는 것입니다 :

    파이썬 2.x에서 또 다른 접근법은 map을 사용하는 것입니다 :

    numbers = map(int, numbers)
    

    참고 : Python 3.x map은 원하는 경우 목록으로 변환 할 수있는지도 객체를 반환합니다.

    numbers = list(map(int, numbers))
    
  3. ==============================

    3.단지 요점,

    단지 요점,

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

    목록 이해력은 더욱 자연스럽지 만

    numbers = map(int, numbers)
    

    가 더 빠르다.

    아마도 이것은 대부분의 경우 중요하지 않습니다.

    유용한 읽기 : LP 대지도

  4. ==============================

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

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

    sum(int(x) for x in numbers)
    

    이 구성은 adamk에서 언급 한 목록 내포와 의도적으로 매우 유사합니다. 대괄호가 없으면 생성자 표현식이라고하며 메서드에 인수 목록을 전달하는 매우 메모리 효율적인 방법입니다. 여기서는 좋은 토론을 할 수 있습니다 : Generator Expressions vs. List Comprehension

  5. ==============================

    5.또 다른 방법,

    또 다른 방법,

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

    6.파이썬 3에서 만드는 또 다른 방법은 다음과 같습니다.

    파이썬 3에서 만드는 또 다른 방법은 다음과 같습니다.

    numbers = [* map (int, numbers)]

  7. ==============================

    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)로 보입니다. 이해력은 약간 빠르지 만 생성기를 푸는 것은 여전히 ​​하나 이상의 요소가있는 목록보다 빠릅니다.

  8. from https://stackoverflow.com/questions/3371269/call-int-function-on-every-list-element by cc-by-sa and MIT license