Verander een enkel getal in enkele cijfers Python

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:

  1. Gebruik strom het getal om te zetten in een tekenreeks, zodat u eroverheen kunt herhalen.

  2. Gebruik een lijstbegripom de tekenreeks in individuele cijfers.

  3. Gebruik intom 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 neerst):

>>> 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 0wilt 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 stringcasten, en vervolgens op een lijst werpt, zal van nature op elk personage breken:

[int(x) for x in str(n)]

Other episodes