0

所以我有一个字符串列表,我想将其转换为整数列表

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

我应该怎么做才能使新列表不会删除零

我想要这样:

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

不是这个:

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

谢谢

4

3 回答 3

1

您可以仅使用数字来执行此操作,无需转换为 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']
于 2013-05-21T06:52:47.300 回答
0

的值与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 中,您得到了一个生成器。

于 2013-05-21T05:33:43.390 回答
0

你可以这样做:

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
于 2013-05-21T05:47:45.820 回答