【问题标题】:Python: add zeroes in single digit numbers without using .zfillPython:在不使用 .zfill 的情况下在单个数字中添加零
【发布时间】:2019-10-11 23:54:12
【问题描述】:

我目前正在使用 micropython,它没有 .zfill 方法。 我想要得到的是 UTC 的 YYMMDDhhmmss。 例如,它给我的时间是

t = (2019, 10, 11, 3, 40, 8, 686538, None)

我可以使用 t[:6] 访问我需要的那些。现在问题出在单个数字上,即 3 和 8。我能够让它显示 1910113408,但我需要得到 19101034008 我会需要在那些 2 之前得到零。我用过

t = "".join(map(str,t))
t = t[2:]

所以我的想法是遍历 t 然后检查数字是否小于 10。如果是。我将在它前面添加零,替换数字。这就是我想出的。

t = (2019, 1, 1, 2, 40, 0)
t = list(t)

for i in t:
    if t[i] < 10:
        t[i] = 0+t[i]
    t[i] = t[i] 
print(t)

但是,这给了我 IndexError: list index out of range 请帮忙,我对编码/python很陌生。

【问题讨论】:

    标签: micropython


    【解决方案1】:

    当你使用时

    for i in t:
    

    i 不是索引,每个项目。

    >>> for i in t:
    ...     print(i)
    ...
    2019
    10
    11
    3
    40
    8
    686538
    None
    

    如果要使用索引,请执行以下操作:

    >>> for i, v in enumerate(t):
    ...     print("{} is {}".format(i,v))
    ...
    0 is 2019
    1 is 10
    2 is 11
    3 is 3
    4 is 40
    5 is 8
    6 is 686538
    7 is None
    

    另一种创建“191011034008”的方法

    >>> t = (2019, 10, 11, 3, 40, 8, 686538, None)
    >>> "".join(map(lambda x: "%02d" % x, t[:6]))
    '20191011034008'
    >>> "".join(map(lambda x: "%02d" % x, t[:6]))[2:]
    '191011034008'
    

    注意:

    1. %02d 当参数小于 10 时添加前导零,否则(大于或等于 10)使用自身。所以 year 仍然是 4digit 字符串。

    2. 此 lambda 不期望该参数为 None。

    我在https://micropython.org/unicorn/测试了这段代码

    编辑:

    str.format 方法版本:

    "".join(map(lambda x: "{:02d}".format(x), t[:6]))[2:]
    

    "".join(map(lambda x: "{0:02d}".format(x), t[:6]))[2:]
    

    第二个例子的0 是参数索引。 如果你想指定它,你可以使用参数索引(例如:格式字符串和参数之间的位置不匹配,想要多次写入相同的参数......等等)。

    >>> print("arg 0: {0}, arg 2: {2}, arg 1: {1}, arg 0 again: {0}".format(1, 11, 111))
    arg 0: 1, arg 2: 111, arg 1: 11, arg 0 again: 1
    

    【讨论】:

    【解决方案2】:

    我建议您使用 Python 的字符串格式化语法。

    >> t = (2019, 10, 11, 3, 40, 8, 686538, None)
    >> r = ("%d%02d%02d%02d%02d%02d" % t[:-2])[2:]
    >> print(r)
    191011034008
    

    让我们看看这里发生了什么:

    • %d 表示“显示一个数字”
    • %2d 表示“显示一个数字,至少 2 位数字”
    • %02d 表示“显示一个数字,至少 2 位,用零填充”

    所以我们提供所有相关数字,根据需要填充它们,并从“2019”中删除“20”。

    【讨论】:

    • 非常简单又不错的解决方案,谢谢!问题,t 之前的 % 是什么意思?我在哪里可以读到这个用 % 解析的字符串?从我所读到的内容中,我没有看到类似的东西。
    • This 是对 Python 中字符串格式化的不同方法的有用总结,其中 MicroPython 实现了前两种。如果您想使用format 方法,this 是参考描述(您可能只需向下翻页到示例部分)。
    • 另外,小修改:parsing 表示从字符串中解释一个值,例如从字符串 20191016 获取数值 2019、10 和 16。此答案中描述的是字符串 formatting
    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2015-05-28
    • 1970-01-01
    相关资源
    最近更新 更多