การแปลงรายการสตริง (อาร์เรย์) และรายการตัวเลขให้กันและกันใน Python

ธุรกิจ

เนื้อหาต่อไปนี้พร้อมกับโค้ดตัวอย่างจะอธิบายวิธีแปลงรายการ (อาร์เรย์) ของสตริง (str) และรายการตัวเลข (int, float) ให้กันและกันใน Python

  • แปลงรายการตัวเลขเป็นรายการสตริง
    • แปลงตัวเลขเป็นสตริงทศนิยม
    • แปลงค่าตัวเลขเป็นสตริงไบนารี ฐานแปด และเลขฐานสิบหก
    • แปลงค่าตัวเลขเป็นสตริงในรูปแบบเลขชี้กำลัง
  • แปลงรายการสตริงเป็นรายการตัวเลข
    • แปลงสตริงทศนิยมเป็นตัวเลข
    • แปลงสตริงไบนารี ฐานแปด และฐานสิบหกเป็นตัวเลข
    • แปลงสตริงในรูปแบบเลขชี้กำลังเป็นค่าตัวเลข
    • แปลงเฉพาะสตริงที่สามารถแปลงเป็นตัวเลขได้

เมื่อสร้างรายการใหม่จากรายการ ความเข้าใจของรายการจะเขียนได้ง่ายกว่าการวนซ้ำ โค้ดตัวอย่างในบทความนี้ยังใช้ความเข้าใจรายการ สำหรับรายละเอียดของความเข้าใจในรายการ ดูบทความต่อไปนี้

โปรดทราบว่ารายการสามารถจัดเก็บข้อมูลประเภทต่างๆ และแตกต่างจากอาร์เรย์โดยสิ้นเชิง ใช้อาร์เรย์ (ไลบรารีมาตรฐาน) หรือ 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() โปรดดูบทความต่อไปนี้

สามารถระบุจำนวนหลักของส่วน mantissa ได้ หากใช้ 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]