Skip to main content
 首页 » 编程设计

python之安全地将字符串转换为元组列表中的整数

2025年05月04日13bluestorm

我有一个这样的元组列表:

[('1001794', 'Us/Eastern', '2', '1', '3', '4', '5') 
('1001832', 'Us/Central', '2', '3', '4', '4', '5') 
('1001848', 'Us/Central', '2', '4', '5', '4', '5') 
('1001855', 'Us/Central', '2', '1', '4', '4', '5') 
('1001899', 'Us/Central', '2', '1', '4', '3', '5') 
('1001914', 'Us/Pacific', '1', '4', '2', '4', '5') 
('1001971', 'Us/Pacific', '3', '4', '2', '3', '5') 
('1002021', 'Us/Eastern', '2', '1', '4', '4', '5') 
('1002026', 'Us/Central', '2', '1', '4', '4', '2') 
('1002028', 'Us/Eastern', '2', '1', '4', '4', '5') 
('1002041', 'Us/Eastern', '2', '4', '3', '5', '4')] 

我需要将其中的所有数字转换为数字。我不介意如果有必要我必须做 6 种不同的列表理解,但我仍然无法充分理解列表理解以正确地从头开始。我尝试这样做:

[x = (int(x[0]),x[1],int(x[2]),int(x[3]),int(x[4]),int(x[5]),int(x[6])) for x in tlist] 

但它告诉我这是无效的语法,我不确定为什么?

请您参考如下方法:

使用str.isdigit:

[tuple(int(y) if y.isdigit() else y for y in x) for x in tup] 
# [(1001794, 'Us/Eastern', 2, 1, 3, 4, 5), ...] 

这是假设您的字符串中的数字是整数。 tup 是您的数据结构。


要处理负整数,请使用封装 try-except block 的函数(阅读 EAFP principle ):

def try_convert(s): 
    try: 
        return int(s) 
    except ValueError: 
        return s 
 
[tuple(try_convert(y) for y in x) for x in tup] 
# [(1001794, 'Us/Eastern', 2, 1, 3, 4, 5), ...]     

要处理 int 和 float,您可以使用嵌套 block :

def try_convert(s): 
    try: 
        return int(s) 
    except ValueError: 
        try: 
            return float(s) 
        except ValueError: 
            return s