Zrobiłem tę listę; każdy element jest ciągiem znaków, który zawiera przecinki (w niektórych przypadkach) i jelita grubego (zawsze):Korzystanie z Pythona Wyższe funkcje porządkowe do manipulowania listami
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'
]
Chciałbym utworzyć nową listę z jednym powyżej następująco:
['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']
ale Chciałbym wiedzieć, czy/jak to jest możliwe w linii lub dwóch z wydajnym kodem wykorzystującym głównie funkcje wyższego rzędu Pythona. Byłem próbuje go:
reduce(lambda x,y: x + y, (map(lambda x: x.split(':')[0].strip().split(','), dinner)))
... produkuje to:
['cake',
'peas',
'cheese',
'duck',
'broccoli',
'onions',
'motor oil',
'pizza',
'ice cream',
'bologna',
'potatoes',
'bacon',
'carrots',
'water',
'rats',
'hats',
'seltzer',
'sleeping',
'whining',
'spitting',
'marmalade']
... ale mam zmaga się z dołączanie kawałek każdej struny po dwukropku powrotem na każdy pozycja.
dlaczego jesteś zaniepokojony o długości kodu? To byłoby znacznie mniej do utrzymania w dłuższej perspektywie. – jpmc26
@ jpmc26 Rozumiem, skąd przychodzisz i zgadzasz się. To dla mnie bardziej ćwiczenie eksploracyjne w zrozumieniu możliwości hofs Pythona. – dstar