在Python中,为数字列表添加前导零

20

我刚学习 Python。我正在尝试调整一个列表的格式,它看起来像下面这样:

data=[1,10,313,4000,51234,123456]

我希望将它们转换为带有前导零的字符串列表:

result=['000001','000010','000313','004000','051234','123456']

每个元素都有6位数字。

我知道对于一个单独的数字X,我可以这样做:

str(X).zfill(6)

但是我不确定如何将其应用于列表。我想解决这个问题而不使用for循环。

有人可以帮忙吗?谢谢。

1个回答

36

像这样在列表推导式中应用相同的zfill函数:

>>> [str(item).zfill(6) for item in data]
['000001', '000010', '000313', '004000', '051234', '123456']

或者,您可以使用字符串的format方法,带有格式说明符,像这样:

>>> ["{:06d}".format(item) for item in data]
['000001', '000010', '000313', '004000', '051234', '123456']

如果您经常需要进行格式化,则可以将其存储在变量中,如下所示:

>>> formatter = "{:06d}".format
>>> [formatter(item) for item in data]
['000001', '000010', '000313', '004000', '051234', '123456']

如果您使用的是 Python 2.x 版本,那么您可以使用 map 函数和 formatter 函数,像这样:

>>> map(formatter, data)
['000001', '000010', '000313', '004000', '051234', '123456']
如果您正在使用Python 3.x版本,map函数会返回一个可迭代的map对象。因此,您需要显式地创建一个列表,就像这样:
>>> list(map(formatter, data))
['000001', '000010', '000313', '004000', '051234', '123456']

1
为了改进你的答案,我建议在列表中填充到最大长度,而不是硬编码的6。 - Malik Brahimi
1
今天学到了新东西,谢谢! - ProfOak
@MalikBrahimi 但是原帖的要求是“每个元素都有6位数字”。 - thefourtheye
@thefourtheye,感谢您的快速回答。这正是我所寻找的。 - user2854008

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接