Συζητήσεις για το μάθημα και ανακοινώσεις

Άσκηση 28-sum-deep-list

 
Picture of STEFANOS KOKOTSAKIS
Άσκηση 28-sum-deep-list
by STEFANOS KOKOTSAKIS - Sunday, 21 January 2018, 10:33 PM
 

Καλησπέρα,

προσπάθησα να λύσω την άσκηση με τον εξής τρόπο:

def islist(A):
  B=[ ]
  for k in A:
    if type(k) is list:
      for l in k:
        B.append(l)
    else:
      B.append(k)
  return B

def ssum(L):                 ####
  A=(islist(islist(islist(islist(L)))))
  return sum(A)

Ωστόσο αν έχουμε τη λίστα L=[[[[[[[[[[[[[[[[[[[[[[[[[[[5]]]]]]]]]]]]]]]]]]]]]]]]]],τότε η λύση δεν είναι ικανοποιητική.Αυτό που θέλω να ρωτήσω είναι πώς μπορώ να εφαρμόσω άπειρες φορές την islist() μέσα σε αυτήν,δηλ A=(islist(islist(islist(islist...(L))))...) .

Ευχαριστώ

Picture of Μιχάλης Κολουντζάκης
Re: Άσκηση 28-sum-deep-list
by Μιχάλης Κολουντζάκης - Sunday, 21 January 2018, 10:51 PM
 

Δε νομίζω ότι πρέπει να εφαρμόσεις κάτι άπειρες φορές. Γιατί δεν κοιτάς τη λύση της άσκησης;

Picture of STEFANOS KOKOTSAKIS
Re: Άσκηση 28-sum-deep-list
by STEFANOS KOKOTSAKIS - Sunday, 21 January 2018, 11:17 PM
 

Όσο εφαρμόζω την islist() μέσα σε αυτήν, οι υπολίστες της L "σπάνε" και τα στοιχεία των υπολιστών εντάσσονται μέσα στην L αυτούσια,πχ αν η L=[1,[2,[3,4]],5,6] και πω Α=islist(L),τότε Α=[1,2,[3,4],5,6],ενώ αν πω A=islist(islist(L)),τότε Α=[1,2,3,4,5,6].Όμως όταν έχω L= [[[[[...[5]...]]]]]] ,πρέπει να εφαρμόσω άπειρες φορές το islist() μέσα σ'αυτό.Υπάρχει κάποιος εύκολος τρόπος να γίνει αυτό;

Ευχαριστώ.