파이썬에서 문자열(배열) 목록과 숫자 목록을 서로 변환하기

사업

다음 내용은 샘플 코드와 함께 파이썬에서 문자열(str) 목록(배열)과 숫자 목록(int, float)을 서로 변환하는 방법을 설명합니다.

  • 숫자 목록을 문자열 목록으로 변환
    • 숫자를 10진수 문자열로 변환
    • 숫자 값을 2진, 8진 및 16진 문자열로 변환합니다.
    • 지수 표기법의 숫자 값을 문자열로 변환합니다.
  • 문자열 목록을 숫자 목록으로 변환
    • 10진수 문자열을 숫자로 변환
    • 2진, 8진 및 16진 문자열을 숫자로 변환합니다.
    • 지수 표기법의 문자열을 숫자 값으로 변환
    • 숫자로 변환할 수 있는 문자열만 변환

목록에서 새 목록을 생성할 때 목록 이해는 for 루프보다 작성하기가 더 간단합니다. 이 문서의 샘플 코드에서는 목록 이해도 사용합니다. 목록 내포에 대한 자세한 내용은 다음 문서를 참조하세요.

목록은 다양한 유형의 데이터를 저장할 수 있으며 배열과 완전히 다릅니다. 다음과 같은 경우 배열(표준 라이브러리) 또는 NumPy를 사용하십시오.

  • 메모리 크기와 메모리 주소가 필요한 프로세스를 처리하고 싶습니다.
  • 대규모 데이터 세트 등의 수치 처리를 위한 배열을 처리하고 싶습니다.

숫자 목록을 문자열 목록으로 변환

숫자를 10진수 문자열로 변환

str()을 사용하여 숫자에서 문자열로 변환합니다.

파이썬에서 숫자는 지수, 16진수, 2진수(16진수 및 2진수 표기법)를 포함한 다양한 형식으로 표현될 수 있습니다. str() 변환은 일반 십진 표기법의 문자열을 생성합니다.

자릿수에 따라 지수 표기법이 자동으로 사용될 수 있습니다.

l_n = [-0.5, 0, 1.0, 100, 1.2e-2, 0xff, 0b11]

l_n_str = [str(n) for n in l_n]
print(l_n_str)
# ['-0.5', '0', '1.0', '100', '0.012', '255', '3']

숫자 값을 2진, 8진 및 16진 문자열로 변환합니다.

2진법, 8진법, 16진법(2진법, 8진법, 16진법) 문자열로 변환하기 위해 다음과 같은 방법을 사용할 수 있습니다.

  • bin()
  • oct()
  • hex()
  • format()
  • str.format()

format() 함수를 사용하면 0을 채우고 숫자를 조정할 수 있습니다.

l_i = [0, 64, 128, 192, 256]

l_i_hex1 = [hex(i) for i in l_i]
print(l_i_hex1)
# ['0x0', '0x40', '0x80', '0xc0', '0x100']

l_i_hex2 = [format(i, '04x') for i in l_i]
print(l_i_hex2)
# ['0000', '0040', '0080', '00c0', '0100']

l_i_hex3 = [format(i, '#06x') for i in l_i]
print(l_i_hex3)
# ['0x0000', '0x0040', '0x0080', '0x00c0', '0x0100']

지수 표기법의 숫자 값을 문자열로 변환합니다.

위에서 언급했듯이 일부 경우는 자릿수에 따라 자동으로 지수 표기법이 될 수 있습니다. 그러나 항상 지수 표기법의 문자열로 변환하려면 다음 중 하나를 사용하십시오.

  • format()
  • str.format()

format() 함수 및 문자열 메서드 str.format()에 대한 자세한 내용은 다음 문서를 참조하세요.

가수 부분의 자릿수를 지정할 수 있습니다. 대문자 E가 인수로 사용되는 경우 출력 문자열도 대문자 E입니다.

l_f = [0.0001, 123.456, 123400000]

l_f_e1 = [format(f, 'e') for f in l_f]
print(l_f_e1)
# ['1.000000e-04', '1.234560e+02', '1.234000e+08']

l_f_e2 = [format(f, '.3E') for f in l_f]
print(l_f_e2)
# ['1.000E-04', '1.235E+02', '1.234E+08']

문자열 목록을 숫자 목록으로 변환

10진수 문자열을 숫자로 변환

int() 또는 float()를 사용하여 문자열에서 숫자로 변환합니다.

int()는 정수로의 변환이고 float()은 부동 소수점 숫자로의 변환입니다.

float()에서 정수 부분이 생략된 문자열은 정수 부분에 대해 0으로 보완됩니다.

l_si = ['-10', '0', '100']

l_si_i = [int(s) for s in l_si]
print(l_si_i)
# [-10, 0, 100]

l_sf = ['.123', '1.23', '123']

l_sf_f = [float(s) for s in l_sf]
print(l_sf_f)
# [0.123, 1.23, 123.0]

2진, 8진 및 16진 문자열을 숫자로 변환합니다.

int()의 두 번째 인수는 기수가 될 수 있습니다. 2진수는 2, 8진수는 8, 16진수는 16으로 문자열을 숫자로 변환합니다.

0이 지정되면 다음 접두사 문자열 각각이 정수로 변환됩니다.

  • 0b
    • 이진수
  • 0o
    • 8진법
  • 0x
    • 16진수
l_sb = ['0011', '0101', '1111']

l_sb_i = [int(s, 2) for s in l_sb]
print(l_sb_i)
# [3, 5, 15]

l_sbox = ['100', '0b100', '0o77', '0xff']

l_sbox_i = [int(s, 0) for s in l_sbox]
print(l_sbox_i)
# [100, 4, 63, 255]

지수 표기법의 문자열을 숫자 값으로 변환

지수 표기법의 문자열은 특별한 지정 없이 float()를 사용하여 직접 변환할 수 있습니다.

l_se = ['1.23e3', '0.123e-1', '123']

l_se_f = [float(s) for s in l_se]
print(l_se_f)
# [1230.0, 0.0123, 123.0]

숫자로 변환할 수 있는 문자열만 변환

숫자로 변환할 수 없는 문자열을 int() 또는 float()에 전달하면 ValueError가 발생합니다.

오류 시 false를 반환하는 새 함수가 정의되면 변환할 수 있는 요소만 숫자로 변환되어 목록의 요소가 될 수 있습니다.

def is_int(s):
    try:
        int(s)
    except ValueError:
        return False
    else:
        return True

def is_float(s):
    try:
        float(s)
    except ValueError:
        return False
    else:
        return True

l_multi = ['-100', '100', '1.23', '1.23e2', 'one']

l_multi_i = [int(s) for s in l_multi if is_int(s)]
print(l_multi_i)
# [-100, 100]

l_multi_f = [float(s) for s in l_multi if is_float(s)]
print(l_multi_f)
# [-100.0, 100.0, 1.23, 123.0]