Ik wil van een getal, bijvoorbeeld 43365644, enkele getallen maken [4,3,3….,4,4]
en voeg het toe aan een lijst
Antwoord 1, autoriteit 100%
Dit kan vrij eenvoudig worden gedaan als u:
-
Gebruik
str
om het getal om te zetten in een tekenreeks, zodat u eroverheen kunt herhalen. -
Gebruik een lijstbegripom de tekenreeks in individuele cijfers.
-
Gebruik
int
om de cijfers weer om te zetten in gehele getallen.
Hieronder is een demonstratie:
>>> n = 43365644
>>> [int(d) for d in str(n)]
[4, 3, 3, 6, 5, 6, 4, 4]
>>>
Antwoord 2, autoriteit 18%
Hier is een manier om het te doen zonder er eerst een string van te maken (gebaseerd op wat rudimentaire benchmarking, dit is ongeveer twee keer zo snel als het stringen van n
eerst):
>>> n = 43365644
>>> [(n//(10**i))%10 for i in range(math.ceil(math.log(n, 10))-1, -1, -1)]
[4, 3, 3, 6, 5, 6, 4, 4]
Dit bijwerken na vele jaren als reactie op opmerkingen dat dit niet werkt voor machten van 10:
[(n//(10**i))%10 for i in range(math.ceil(math.log(n, 10)), -1, -1)][bool(math.log(n,10)%1):]
Het probleem is dat met bevoegdheden van 10 (en alleen met deze), een extra stap vereist is. — Daarom gebruiken we de rest in de log_10 om te bepalen of u de toonaangevende 0
wilt verwijderen —- we kunnen dit niet gebruiken omdat drijvende wiskundige fouten dit veroorzaken om dit te mislukken 10. Dus ik heb besloten om de Unholy River in de zonde over te steken en op Regex te bellen.
In [32]: n = 43
In [33]: [(n//(10**i))%10 for i in range(math.ceil(math.log(n, 10)), -1, -1)][not(re.match('10*', str(n))):]
Out[33]: [4, 3]
In [34]: n = 1000
In [35]: [(n//(10**i))%10 for i in range(math.ceil(math.log(n, 10)), -1, -1)][not(re.match('10*', str(n))):]
Out[35]: [1, 0, 0, 0]
Antwoord 3, Autoriteit 12%
De eenvoudigste manier is om de INT in een touw te draaien en elk karakter van de tekenreeks te nemen als een element van uw lijst:
>>> n = 43365644
>>> digits = [int(x) for x in str(n)]
>>> digits
[4, 3, 3, 6, 5, 6, 4, 4]
>>> lst.extend(digits) # use the extends method if you want to add the list to another
Het gaat om een gietoperatie, maar het is leesbaar en acceptabel als u geen extreme prestaties nodig hebt.
Antwoord 4, Autoriteit 4%
Als u uw nummer in een lijst met die nummers wilt wijzigen, zou ik het eerst naar een string
casten, en vervolgens op een lijst werpt, zal van nature op elk personage breken:
[int(x) for x in str(n)]