所以我有一个字符串列表,我想将其转换为整数列表
['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]
由于
答案 0 :(得分: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']
答案 1 :(得分: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中,你得到一台发电机。
答案 2 :(得分: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