繁体   English   中英

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

[英]Convert List of strings to ints without removing 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]

谢谢

您只需使用数字即可完成此操作,而无需隐秘

>>> 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 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM