在Python中添加一个字符串前缀

4
我正在尝试在列表中的每个数字前添加零,如果它不是所需位数的数字。
    lst = ['1234','2345']
    for x in lst:
        while len(x) < 5:
            x = '0' + x
    print(lst)

理想情况下,这将打印 ['012345','02345']。

一个更好的例子是 lst = ['1234', '23456']。我们如何打印 lst 并得到 ['01234','23456'] - Coby
最终成功的原因是答案的组合。 `lst = ['1234','2345'] newlst = []for i in lst: i = i.zfill(5) newlst.append(i)print(newlst)' - Coby
5个回答

13

你可以使用zfill

在数字字符串 s 的左侧填充零,直到达到指定的宽度。

lst = ['1234','2345']
[s.zfill(5) for s in lst]
# ['01234', '02345']

或者使用带有填充和对齐format方法:


["{:0>5}".format(s) for s in lst]
# ['01234', '02345']

1
确实是个很好的主意,非常适合这种情况... 我喜欢它,点赞! - developer_hatch

3

嗨,达米安,谢谢你的回复。不幸的是,这似乎没有考虑到列表项足够长的情况。对于我提供的糟糕示例,我感到抱歉。 - Coby
抱歉@ Damian,我应该给出一个更好的例子。假设lst = ['1234','23456'],我试图得到['01234','23456']。第二个数字不受影响,因为它足够长。 - Coby
@Coby 哦,现在我明白了,我会更新答案并让你知道 :) - developer_hatch
@Coby 我认为这就是你所看的,我这样做是为了尽量不修改你的代码。希望能有所帮助,如果有用的话别忘了投票和接受答案 :) - developer_hatch

2
您可以使用类似以下的列表推导式:
```python ```
>>> ['0' * (5-len(x)) + x for x in lst]
['01234', '02345']

或者尝试使用列表 + 字典

>>> list(map(lambda x: '0' * (5-len(x)) + x, lst))
['01234', '02345']

1
有点扭曲,但我喜欢它,它完成了任务 :) - developer_hatch

1

最终,是答案的结合完成了这项工作。

lst = ['1234','2345']
newlst = []

for i in lst:
    i = i.zfill(5)
    newlst.append(i)

print(newlst)

如果我的示例不清楚,我道歉。感谢所有提供答案的人!


干得好,找到解决方案很棒,我认为这是加一分的 :) - developer_hatch

0
你可以这样做:
>>> lst = ['1234','2345']
>>> lst = ['0' * (5 - len(i)) + i for i in lst]
>>> print(lst)
['01234', '02345']

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