将字符串列表转换为整型而不删除0



我有一个字符串列表我想把它转换成整型数组

[' 030 ', ' 031 ', ' 031 ', ' 031 ', ' 030 ', ' 031 ', ' 031 ', ' 032 ', ' 031 ', ' 032 ']

我该怎么做才能使新列表不删除0

我想要这样:

[030, 031, 031, 031, 030, 031, 031, 032, 031, 032]

不是这样的:

[30, 31, 31, 31, 30, 31, 31, 32, 31, 32]

谢谢

你可以用数字来做这个,不需要转换成str

>>> def f(rgb, bw):
...  return [x // 10 * 10 + bw * 10 ** i // 100 % 10 for i, x in enumerate(rgb)]
... 
>>> f((233, 199, 016), 31)
[230, 193, 11]

下面是一个使用字符串

的版本
>>> def f(rgb, bw):
...  return [s[:2] + c for s, c in zip(rgb, bw)]
... 
>>> f(("233", "199", "016"), "031")
['230', '193', '011']

int("030")的值与int("30")的值相同。当我们谈论一个数字时,前导0没有语义值-如果你想保持前导0,你不再存储一个数字,而是一个数字的表示,所以它需要是一个字符串。

如果您需要以两种方式使用它,解决方案是将其存储为最常用的形式,然后在需要时进行转换。如果您主要需要前导零(也就是说,需要它作为字符串),那么只需保持原样,并根据需要对值调用int()

如果相反,则可以使用字符串格式化将数字填充到所需的位数:

>>> "{0:03d}".format(30)
'030'

如果零填充不一致(也就是说,不可能从int中恢复格式),那么最好在两种形式中都保留它:

>>> [(value, int(value)) for value in values]
[('030', 30), ('031', 31), ('031', 31), ('031', 31), ('030', 30), ('031', 31), ('031', 31), ('032', 32), ('031', 31), ('032', 32)]

哪种方法最好完全取决于具体情况。

编辑:对于您的具体情况,如在评论中,您需要这样的内容:

>>> current = ("233", "199", "016")
>>> modifier = "031"
>>> ["".join(part) for part in zip(*list(zip(*current))[:-1] + [modifier])]
['230', '193', '011']

要分解这个问题,您需要将每个数字的第三位替换为修饰语中的相关数字。这是通过使用zip()来制作数字的列来完成的——list(zip(*current))给我们[('2', '1', '0'), ('3', '9', '1'), ('3', '9', '6')]——然后我们用修改后的列替换最后一列,并再次使用zip()来再次给我们行。然后将单个数字连接回字符串。

2中的注释。x, zip()给出了一个列表,所以您不需要在list()中包装调用。在3。X,你得到一个生成器

你可以这样做:

class MyNum(int):
    def __init__(self,s):
        self=int(s)
    def __str__(self):
        return '{:03d}'.format(self)
    def __repr__(self):
        return '{:03d}'.format(self)    
li=[MyNum(i) for i in ('030','031','032')]     
n=li[0]
print li,n*2,n/3.5 

打印:

[030, 031, 032] 60 8.57142857143

最新更新