Python: добавление нулей в однозначные числа без использования .zfill - PullRequest
0 голосов
/ 12 октября 2019

Я сейчас использую микропифон, и у него нет метода .zfill. То, что я пытаюсь получить, это получить YYMMDDhhmmss UTC. Время, которое он мне дает, например:

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

Я могу получить доступ к тем, которые мне нужны, используя t [: 6]. Теперь проблема с однозначными числами, 3 и 8. Я смог заставить его показать 1910113408, но мне нужно получить 19101 03 40 08 Мне нужно было быполучить нули перед этими 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: список индексов вне диапазона Пожалуйста, помогите, я довольно новичок в кодировании / Python.

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Я бы порекомендовал вам использовать синтаксис форматирования строк 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 цифры, заполнить нулями "

, поэтому мы вводим все соответствующие числа, дополняя их какнеобходимо, и вырезать «20» из «2019».

0 голосов
/ 12 октября 2019

Когда вы используете

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) использовать себя. Таким образом, год все еще является 4-разрядной строкой.

  2. Эта лямбда не ожидает, что аргумент равен 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
...