Vinnaren i pepparkakshustävlingen!
2011-09-03, 07:18
  #1
Medlem
Kabaals avatar
Har ett fullt fungerande program och jag behöver splitta upp en integer till en lista eller iaf komma åt varje siffra i talet separat. map(int,str(variabel)) kom fram efter en del sökning och den funkar perfekt för ändamålet. Frågan är nu om det finns något bättre(/"snyggare") sätt att dela upp en variabel i en lista eller något annat sätt som gör så jag kan dela upp den? Jag gillar inte att ha kod jag inte själv förstår helt så jag kommer nu till er på mina knän
Citera
2011-09-03, 08:01
  #2
Medlem
Citat:
Ursprungligen postat av Kabaal
Har ett fullt fungerande program och jag behöver splitta upp en integer till en lista eller iaf komma åt varje siffra i talet separat. map(int,str(variabel)) kom fram efter en del sökning och den funkar perfekt för ändamålet. Frågan är nu om det finns något bättre(/"snyggare") sätt att dela upp en variabel i en lista eller något annat sätt som gör så jag kan dela upp den? Jag gillar inte att ha kod jag inte själv förstår helt så jag kommer nu till er på mina knän

Kanske inget bra svar på din fråga, men något sådant här skulle du kunna göra i erlang:

3> lists:foreach(fun(D) -> io:format("~p\n", [D]) end, integer_to_list(12345678)).
49
50
51
52
53
54
55
56
ok
4>
Citera
2011-09-03, 08:50
  #3
Medlem
Aardwarks avatar
Citat:
Ursprungligen postat av Kabaal
Har ett fullt fungerande program och jag behöver splitta upp en integer till en lista eller iaf komma åt varje siffra i talet separat. map(int,str(variabel)) kom fram efter en del sökning och den funkar perfekt för ändamålet. Frågan är nu om det finns något bättre(/"snyggare") sätt att dela upp en variabel i en lista eller något annat sätt som gör så jag kan dela upp den? Jag gillar inte att ha kod jag inte själv förstår helt så jag kommer nu till er på mina knän
Kod:
m = map(function, collection) #betyder samma sak som
m = [function(x) for x in collection] #som betyder samma sak som

m = []
for x in collection:
  m.append(function(x))
Anledningen till att det blir varje siffra (istället för hela talet) är för att for.. itererar över varje bokstav i en sträng.

Det som tungusta har skrivit är samma som map(ord, str(integer)) och tar fram teckenkoden (i detta fallet asciikoden) för varje siffra.
Citera
2011-09-03, 09:46
  #4
Moderator
vhes avatar
Aardwark har redan förklarat varför det funkar. Själv vill jag anmärka på om det där är det bästa sättet att lösa problemet.

Själv tycker jag nog att just den konstruktionen du hittat är den bästa, dock så verkar pythoncommunityn i stort (och #python i synnerhet) på sistone föredra list comprehensions över användade av map av läsbarhetsskäl, så följande lösning:

Kod:
[int(char) for char in str(var)]

skulle vara att föredra framför

Kod:
map(int, str(var))

Personligen förstår jag inte riktigt map-hatet som brett ut sig...
Citera
2011-09-03, 10:32
  #5
Medlem
Jag tycker också att du redan sitter på den bästa lösningen redan. Lär dig map istället för att lära dig andra sätt.
Citera
2011-09-03, 12:51
  #6
Medlem
Kabaals avatar
Tack för alla bra svar! Nu har jag bättre pejl på läget, ett par veckor till med detta så kanske jag kan göra något användbart!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback