在 Python 中將字符串(數組)列表和數字列表相互轉換

商業

以下內容以及示例代碼說明瞭如何在 Python 中將字符串 (str) 列表(數組)和數字列表(int、float)相互轉換。

  • 將數字列表轉換為字符串列表
    • 將數字轉換為十進製字符串
    • 將數值轉換為二進制、八進制和十六進製字符串
    • 以指數表示法將數值轉換為字符串
  • 將字符串列表轉換為數字列表
    • 將十進製字符串轉換為數字
    • 將二進制、八進制和十六進製字符串轉換為數字
    • 將指數符號的字符串轉換為數值
    • 只轉換可以轉換為數字的字符串

從列表生成新列表時,列表推導式比 for 循環更容易編寫。本文中的示例代碼也使用了列表推導。有關列表推導的詳細信息,請參閱以下文章。

請注意,列表可以存儲不同類型的數據,並且與數組完全不同。在以下情況下使用數組(標準庫)或 NumPy。

  • 我想處理需要內存大小和內存地址的進程。
  • 想要處理數組進行大型數據集的數值處理等。

將數字列表轉換為字符串列表

將數字轉換為十進製字符串

使用 str() 將數字轉換為字符串。

在 Python 中,數字可以用多種格式表示,包括指數、十六進制和二進制(十六進制和二進製表示法)。 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']

將數值轉換為二進制、八進制和十六進製字符串

要轉換為二進制、八進製或十六進制(二進製表示法、八進製表示法或十六進製表示法)字符串,可以使用以下方法。

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

使用 format() 函數,可以填充零並調整數字。

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']

將字符串列表轉換為數字列表

將十進製字符串轉換為數字

使用 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]

將二進制、八進制和十六進製字符串轉換為數字

int() 的第二個參數可以是基數:2 表示二進制,8 表示八進制,16 表示十六進制,將字符串轉換為數字。

如果指定 0,則以下每個帶前綴的字符串都將轉換為整數。

  • 0b
    • 二進制數字
  • 0o
    • 八進制
  • 0x
    • 十六進制
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]
Copied title and URL