Ho creato questo elenco; ogni elemento è una stringa che contiene le virgole (in alcuni casi) e del colon (sempre):Utilizzo di Python Funzioni di ordine superiore per manipolare le liste
dinner = [
'cake,peas,cheese : No',
'duck,broccoli,onions : Maybe',
'motor oil : Definitely Not',
'pizza : Damn Right',
'ice cream : Maybe',
'bologna : No',
'potatoes,bacon,carrots,water: Yes',
'rats,hats : Definitely Not',
'seltzer : Yes',
'sleeping,whining,spitting : No Way',
'marmalade : No'
]
Vorrei creare un nuovo elenco da quello di cui sopra come segue:
['cake : No',
'peas : No',
'cheese : No',
'duck : Maybe',
'broccoli : Maybe',
'onions : Maybe',
'motor oil : Definitely Not',
'pizza : Damn Right',
'ice cream : Maybe',
'bologna : No',
'potatoes : Yes',
'bacon : Yes',
'carrots : Yes',
'water : Yes',
'rats : Definitely Not',
'hats : Definitely Not',
'seltzer : Yes',
'sleeping : No Way',
'whining : No Way',
'spitting : No Way',
'marmalade : No']
Ma io Mi piacerebbe sapere se/come è possibile farlo in una riga o due di codice efficiente che utilizza principalmente le funzioni di ordine superiore di Python. Sto tentando esso:
reduce(lambda x,y: x + y, (map(lambda x: x.split(':')[0].strip().split(','), dinner)))
... produce questo:
['cake',
'peas',
'cheese',
'duck',
'broccoli',
'onions',
'motor oil',
'pizza',
'ice cream',
'bologna',
'potatoes',
'bacon',
'carrots',
'water',
'rats',
'hats',
'seltzer',
'sleeping',
'whining',
'spitting',
'marmalade']
... ma sto lottando con aggiungendo il pezzo di ogni stringa dopo i due punti indietro su ogni articolo.
Perché siete preoccupati sulla lunghezza del codice? Questo sarebbe molto meno mantenibile a lungo termine. – jpmc26
@ jpmc26 Capisco da dove vieni e accetti. Questo per me è più un esercizio esplorativo per comprendere le capacità degli hof di Python. – dstar