Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.
def flatten(field):
    """Epistrefei lista afairwntas fwliasmenes listes.

    field -- lista me fwliasmena string. Ka8e lista exei dyo stoixeia: 
    to prwto einai string kai to deutero einai eite lista ths idias 
    morfhs 'h None. (Opws kai h cherry_field sto swma ths synarthshs 
    pick_cherries_onebyone()).

    Epistrefei nea lista pou periexei ola ta string pou briskontai sti
    field, xwris omws na periexontai se fwliasmenes listes.

    Paradeigmata:
    >>> cherry_field = ['cherry1', ['cherry2', ['cherry3', ['cherry4', ['last cherry', None]]]]]
    >>> flatten(cherry_field)
    ['cherry1', 'cherry2', 'cherry3', 'cherry4', 'last cherry']
    >>> flatten(['Hello', ['world', None]])
    ['Hello', 'world']
    >>> flatten(['Lone cherry', None])
    ['Lone cherry']
    """
    ls = field
    if ls[1] is None:
        return [ls[0]]
    n_ls = [ls[0]]
    return n_ls + flatten(ls[1])

def cherry_string(field):
    """String me ola ta string pou periexoun 'cherry' sti field.

    field -- lista me fwliasmena string. Ka8e lista exei dyo stoixeia: 
    to prwto einai string kai to deutero einai eite lista ths idias 
    morfhs 'h None. 
    (Opws kai h cherry_field sto swma ths synarthshs pick_cherries_onebyone()).

    Epistrefei string pou exei proel8ei apo synenwsh olwn twn string
    pou periexontai sti field kai periexoun th le3h 'cherry'.

    Paradeigmata:

    >>> cherry_field = ['cherry1', ['cherry2', ['cherry3', ['cherry4', ['last cherry', None]]]]]
    >>> cherry_string(cherry_field)
    'cherry1cherry2cherry3cherry4last cherry'
    >>> cherry_string(['Hello', ['cherry', None]])
    'cherry'
    >>> cherry_string(['Hello', ['first cherry', ['world', ['last cherry', None]]]])
    'first cherrylast cherry'
    """
    """ SYMPLHRWSTE TA KENA APO KATW."""

    from functools import reduce
    from operator import ________
    return reduce(_________, __________________]

Μου ζητάει να φτιάξω την cherry_string(field), συμπληρώνοντας ΜΟΝΟ τα 3 κενά(χωρίς να παραλείψω κάποια από τις ήδη υπάρχουσες εντολές)..

Δεν ξέρω τί άλλο να κάνω, το άφησα εδώ..

def cherry_string(field):    

    from functools import reduce
    from operator import add
    return reduce(add, [flatten(field)[x] for x in flatten(field) if 'cherry' in flatten(field)[x]]

Ευχαριστώ για το χρόνο που αφιερώνετε :)

ΥΓ:     Η        def cherry_string(field):    

                                from functools import reduce
                                from operator import add
                                return reduce(add, flatten(field)]    
#.....................λειτουργούσε χωρίς να ξεχωρίζει το περιεχόμενο της λίστας..

Δημοσ.
Η πρωτη προσπαθεια σου θελει μονο να αφαιρεθουν καποια πραγματακια. Αυτην εννοω: return reduce(add, [flatten(field)[x] for x in flatten(field) if 'cherry' in flatten(field)[x]])
 
Ψαξε λιγο στο SO και θα το βρεις. Δεν ασχολουμαι και πολυ με python και σε 20 λεπτα με λιγο ψαξιμο το βρηκα.
  • Thanks 1
Δημοσ. (επεξεργασμένο)

Αφού έχεις έτοιμη τη flatten που είναι το δύσκολο κομμάτι της υπόθεσης θα την χρησιμοποιήσεις για να πάρεις την αρχική συνολική λίστα και από αυτή με list comprehension https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions θα πάρεις τη λίστα που έχει μόνο "cherries",  στην οποία θα εφαρμόσεις την add.

 

>>> def flatten(field):
    ls = field
    if ls[1] is None:
        return [ls[0]]
    n_ls = [ls[0]]
    return n_ls + flatten(ls[1])

>>> cherry_field = ['cherry1', ['cherry2', ['cherry3', ['cherry4', ['last cherry', None]]]]]
>>> a=['Hello', ['cherry', None]]
>>> b=['Hello', ['first cherry', ['world', ['last cherry', None]]]]
>>> [cherry for cherry in flatten(cherry_field) if "cherry" in cherry]
['cherry1', 'cherry2', 'cherry3', 'cherry4', 'last cherry']
>>> [cherry for cherry in flatten(a) if "cherry" in cherry]
['cherry']
>>> [cherry for cherry in flatten(b) if "cherry" in cherry]
['first cherry', 'last cherry']
>>> 

 

 

Επεξ/σία από k33theod
  • Thanks 1
Δημοσ.

Δεν εχω προσβαση σε pc αυτη την στιγμη για να δοκιμασω αλλα η λυση που εδωσες εσυ ο ιδιος ηταν πολυ κοντα. Αντι για την add ομως βαλε την concat και θα εισαι ενταξει. Αν θες να εισαι και πιο σωστος μπορεις να βαλεις και σαν initialValue στην reduce το ουδετερο στοιχειο της συναθροισης Αλφαριθμητικων δηλαδη το ""

  • Thanks 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...