Próbuję przygotować zer do każdego numeru na liście, jeśli nie jest to niezbędna liczba cyfr.

    lst = ['1234','2345']
    for x in lst:
        while len(x) < 5:
            x = '0' + x
    print(lst)

Idealnie to wydrukuje ['012345', "02345"]

3
Coby 28 czerwiec 2017, 04:45

5 odpowiedzi

Najlepsza odpowiedź

Ostatecznie była to połączenie odpowiedzi, które wykonały pracę.

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

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

print(newlst)

Przepraszam, jeśli mój przykład nie był jasny. Dziękuję wszystkim, którzy oferowali odpowiedzi!

1
Coby 28 czerwiec 2017, 14:47

Możesz to zrobić:

>>> lst = ['1234','2345']
>>> lst = ['0' * (5 - len(i)) + i for i in lst]
>>> print(lst)
['01234', '02345']
0
Dat Ha 28 czerwiec 2017, 01:56

Możesz użyć w ten sposób zrozumienia listy:

>>> ['0' * (5-len(x)) + x for x in lst]
['01234', '02345']

Lub list + map Spróbuj:

>>> list(map(lambda x: '0' * (5-len(x)) + x, lst))
['01234', '02345']
2
blacksite 28 czerwiec 2017, 01:56

Kod nie wykonuje zadania, ponieważ struny w Pythonie są niezmienne, zobacz to, aby uzyskać więcej informacji Dlaczego nazywa metodę ciągów Pythona, chyba że przypisasz jego wyjście?

Możesz wyliczyć w tym przypadku tak:

lst = ['1234','2345', "23456"]
for i, l in enumerate(lst):
  if len(l) < 5:
    lst[i] = '0' + l
print(lst)

['01234', "02345", "23456"]

3
Damián Rafael Lattenero 28 czerwiec 2017, 14:55

Możesz użyć zfill:

Pad łańcuch numeryczny S po lewej stronie zero cyfr, aż do osiągnięcia podanej szerokości

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

Lub użyj Metoda {X0}} z Wyrównanie i wyrównanie :

["{:0>5}".format(s) for s in lst]
# ['01234', '02345']
13
Psidom 28 czerwiec 2017, 01:54