파이썬에서 문자열을 정수로 변환하는 방법은 무엇입니까?


438

다음과 같이 MySQL 쿼리의 튜플 튜플이 있습니다.

T1 = (('13', '17', '18', '21', '32'),
      ('07', '11', '13', '14', '28'),
      ('01', '05', '06', '08', '15', '16'))

모든 문자열 요소를 정수로 변환하고 목록 목록에 다시 넣고 싶습니다.

T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]

나는 그것을 달성하려고했지만 eval아직 괜찮은 결과를 얻지 못했습니다.


2
다른 데이터베이스 어댑터 모듈을 고려할 수 있습니까? PostgreSQL 어댑터 모듈이 T2 세트와 같은 결과를 반환한다는 것을 알고 있습니다.
kquinn


참고 : map을 사용할 때 python 3 및 3.5의 맵 객체 목록이 표시됩니다. 위에서 언급 한 것처럼 Python 3.5 에서이 작업을 수행합니다. new_list = list (a.isdigit () 인 경우 T1에서 b의 경우 list (int (a)의 경우 a) b)
손님

중첩되지 않은 목록에 대한 비슷한 질문 : 목록의 모든 문자열을 int로 변환
Aran-Fey

답변:


630

int()문자열을 정수 값으로 변환하는 Python 표준 내장 함수입니다. 인수로 숫자를 포함하는 문자열로 호출하고 정수로 변환 된 숫자를 리턴합니다.

print (int("1") + 1)

위의 내용이 인쇄 2됩니다.

목록의 구조, T1 (단순히 목록을 포함하고 한 수준 만 포함)을 알고 있다면 Python 2 에서이 작업을 수행 할 수 있습니다.

T2 = [map(int, x) for x in T1]

파이썬 3에서 :

T2 = [list(map(int, x)) for x in T1]

4
왜 안돼 T2 = map(lambda lol: map(int, lol), T1)? 지도 또는 목록 이해, 둘 다 바보입니다;)
날으는 양

4
@ flyingsheep 이중지도는 어리석은 것 같습니다.
jamylak

파이썬 2의 수명 종료 때문에 파이썬 2 예제를 제거하는 것은 어떻습니까?
Alisso

28

목록 이해 로이 작업을 수행 할 수 있습니다.

T2 = [[int(column) for column in row] for row in T1]

내부 목록 이해 ( [int(column) for column in row]) listintint10 진수 문자열과 같은 일련의 사용 가능한 객체로부터의를 row만듭니다. 외부 목록 이해 ( [... for row in T1]))는의 각 항목에 적용된 내부 목록 이해 결과 목록을 작성합니다 T1.

행에 변환 할 수없는 객체가 포함 된 행이 있으면 코드 스 니펫이 실패합니다. int . 10 진이 아닌 문자열을 포함하는 행을 처리하려면 더 똑똑한 기능이 필요합니다.

행의 구조를 알고 있으면 내부 목록 이해를 행의 함수 호출로 바꿀 수 있습니다. 예 :

T2 = [parse_a_row_of_T1(row) for row in T1]

16

오히려 이해력있는 목록 만 사용하는 것이 좋습니다.

[[int(y) for y in x] for x in T1]

12

int( )put 대신 put float( )을 사용하면 정수와 함께 소수점을 사용할 수 있습니다.


2
답변에 대한 자세한 내용을 설명해 주시겠습니까?
Rico

10

나는 지금까지 모든 사람의 대답에 동의 할 것이지만 문제는 모든 정수를 가지고 있지 않으면 충돌 할 것이라는 것입니다.

정수가 아닌 사람을 제외하려면

T1 = (('13', '17', '18', '21', '32'),
      ('07', '11', '13', '14', '28'),
      ('01', '05', '06', '08', '15', '16'))
new_list = list(list(int(a) for a in b) for b in T1 if a.isdigit())

이것은 실제 숫자 만 산출합니다. 직접 목록 이해를 사용하지 않는 이유는 목록 이해가 내부 변수를 누출하기 때문입니다.


2
isdigit까다 롭습니다 -1. / int(<str>)로 확인하는 방법 입니다. tryexcept
totoro

9
T3=[]

for i in range(0,len(T1)):
    T3.append([])
    for j in range(0,len(T1[i])):
        b=int(T1[i][j])
        T3[i].append(b)

print T3

7
스택 오버플로에 오신 것을 환영합니다! 코드 블록 만 게시하는 대신이 코드로 인해 문제가 해결 된 이유를 설명하십시오. 설명이 없으면 대답이 아닙니다.
Artemix

7

이 시도.

x = "1"

x는 주위에 따옴표가 있기 때문에 문자열이지만 숫자가 있습니다.

x = int(x)

x에는 숫자 1이 있으므로 정수로 바꿀 수 있습니다.

문자열이 숫자인지 확인하려면이 작업을 수행 할 수 있습니다.

def is_number(var):
    try:
        if var == int(var):
            return True
    except Exception:
        return False

x = "1"

y = "test"

x_test = is_number(x)

print(x_test)

x가 숫자이므로 IDLE True로 인쇄해야합니다.

y_test = is_number(y)

print(y_test)

y는 숫자가 아니기 때문에 IDLE False로 인쇄해야합니다.


2
is_number 함수가 잘못되었습니다. '1'은 1이 아닙니다. 이것은 Perl이 아닙니다. - P
Veky

3
바퀴를 재발 명하지 마십시오 x.isnumeric().
bfontaine

4

목록 이해 사용하기 :

t2 = [map(int, list(l)) for l in t1]

1
파이썬 3에서 이것은 맵 객체의 목록을 반환합니다 :(
CpILL

3

Python 3.5.1에서는 다음과 같은 것이 작동합니다.

c = input('Enter number:')
print (int(float(c)))
print (round(float(c)))

Enter number:  4.7
4
5

성 조지.


3

이 기능을 참조하십시오

def parse_int(s):
    try:
        res = int(eval(str(s)))
        if type(res) == int:
            return res
    except:
        return

그때

val = parse_int('10')  # Return 10
val = parse_int('0')  # Return 0
val = parse_int('10.5')  # Return 10
val = parse_int('0.0')  # Return 0
val = parse_int('Ten')  # Return None

당신은 또한 확인할 수 있습니다

if val == None:  # True if input value can not be converted
    pass  # Note: Don't use 'if not val:'

eval사악합니다 :로 바꿔야합니다 ast.literal_eval.
Eli Korvigo

3

파이썬 2의 또 다른 기능적 솔루션 :

from functools import partial

map(partial(map, int), T1)

파이썬 3은 약간 지저분합니다.

list(map(list, map(partial(map, int), T1)))

우리는 이것을 래퍼로 고칠 수 있습니다

def oldmap(f, iterable):
    return list(map(f, iterable))

oldmap(partial(oldmap, int), T1)

1

그것이 튜플의 튜플 인 경우와 같은 rows=[map(int, row) for row in rows]것이 트릭을 수행합니다. (목록 이해력과 map (f, lst)에 대한 호출이 있는데, 거기에는 [f (a) in a lst]와 같습니다.)

데이터베이스에 어떤 이유로 든 무언가가있는 경우 Eval은 당신이하고 싶은 것이 아닙니다__import__("os").unlink("importantsystemfile") . 항상 입력을 확인하십시오 (다른 것이 없으면 입력이 잘못되면 int () 예외가 발생합니다).


-1

다음과 같이 할 수 있습니다 :

T1 = (('13', '17', '18', '21', '32'),  
     ('07', '11', '13', '14', '28'),  
     ('01', '05', '06', '08', '15', '16'))  
new_list = list(list(int(a) for a in b if a.isdigit()) for b in T1)  
print(new_list)  

-1

아직 여기에 언급되지 않은 사용 가능한 옵션을 공유하고 싶습니다.

rumpy.random.permutation(x)

배열 x의 무작위 순열을 생성합니다. 하지가 정확히 무엇을 요구하지만 비슷한 질문에 대한 잠재적 인 솔루션입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.