파이썬에서 문자열을 정수로 변환하는 방법은 무엇입니까?
다음과 같이 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
아직 괜찮은 결과를 얻지 못했습니다.
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]
목록 이해 로이 작업을 수행 할 수 있습니다.
T2 = [[int(column) for column in row] for row in T1]
내부 목록 이해 ( [int(column) for column in row]
) list
는 int
의 int
10 진수 문자열과 같은 일련의 사용 가능한 객체로부터의를 row
만듭니다. 외부 목록 이해 ( [... for row in T1])
)는의 각 항목에 적용되는 내부 목록 이해 결과 목록을 작성합니다 T1
.
행에 의해 변환 할 수없는 객체가 포함 된 경우 코드 스 니펫이 실패합니다 int
. 10 진이 아닌 문자열을 포함하는 행을 처리하려면 더 똑똑한 기능이 필요합니다.
행의 구조를 알고 있으면 내부 목록 이해를 행 함수에 대한 호출로 바꿀 수 있습니다. 예 :
T2 = [parse_a_row_of_T1(row) for row in T1]
오히려 이해력있는 목록 만 사용하는 것이 좋습니다.
[[int(y) for y in x] for x in T1]
int( )
put 대신 put float( )
을 사용하면 정수와 함께 소수점을 사용할 수 있습니다.
나는 지금까지 모든 사람의 대답에 동의 할 것이지만 문제는 모든 정수를 가지고 있지 않으면 충돌 할 것이라는 것입니다.
정수가 아닌 사람을 제외하려면
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())
이것은 실제 숫자 만 산출합니다. 직접 목록 이해를 사용하지 않는 이유는 목록 이해가 내부 변수를 누출하기 때문입니다.
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
이 시도.
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로 인쇄해야합니다.
목록 이해 사용하기 :
t2 = [map(int, list(l)) for l in t1]
Python 3.5.1에서는 다음과 같은 것이 작동합니다.
c = input('Enter number:')
print (int(float(c)))
print (round(float(c)))
과
Enter number: 4.7
4
5
성 조지.
이 기능을 참조하십시오
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:'
파이썬 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)
그것이 튜플의 튜플 인 경우와 같은 rows=[map(int, row) for row in rows]
것이 트릭을 수행합니다. (목록 이해와 map (f, lst)에 대한 호출이 있는데, 거기에 [f (a) in a lst]와 동일합니다.)
어떤 이유로 데이터베이스에 어떤 것이있는 경우 Eval은 당신이하고 싶은 것이 아닙니다__import__("os").unlink("importantsystemfile")
. 항상 입력을 확인하십시오 (다른 것이 없으면 입력이 잘못되면 int () 예외가 발생합니다).
아직 여기에 언급되지 않은 사용 가능한 옵션을 공유하고 싶습니다.
rumpy.random.permutation(x)
배열 x의 무작위 순열을 생성합니다. 하지가 정확히 무엇을 요구하지만 비슷한 질문에 대한 잠재적 인 솔루션입니다.
다음과 같이 할 수 있습니다 :
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)
참고 URL : https://stackoverflow.com/questions/642154/how-to-convert-strings-into-integers-in-python
'Programming' 카테고리의 다른 글
WCF 서비스의 REST / SOAP 엔드 포인트 (0) | 2020.02.19 |
---|---|
Chrome 개발자 도구에서로드 된 모든 스크립트를 검색하는 방법 (0) | 2020.02.19 |
Google Maps API v3 : 모든 마커를 제거하는 방법? (0) | 2020.02.19 |
POSIX를 사용하여 명령을 실행하고 C ++에서 명령의 출력을 얻으려면 어떻게해야합니까? (0) | 2020.02.19 |
Java int to String-Integer.toString (i) 대 새로운 Integer (i) .toString () (0) | 2020.02.19 |