Перепишіть наступний цикл як list comprehension :
>>> words = ['attribution', 'confabulation', 'elocution','sequoia', 'tenacious', 'unidirectional']
>>> vsequences = set()
>>> for word in words:
vowels = []
for char in word:
if char in 'aeiou':
vowels.append(char)
vsequences.add(''.join(vowels))
>>> sorted(vsequences)
['aiuio', 'eaiou', 'eouio', 'euoia', 'oauaio', 'uiieioa']
Для успішного вирішення завдання потрібно спочатку розібратись, як працює цей цикл.
ВідповістиВидалитиword(стрічка) беруться по черзі зі списку words
char(стрічка) беруться по черзі зі стрічки word
якщо цей char є зі стрічки 'aeiou'
до списку vowels додається цей char
до vsequences(набір) додаємо перетворений у стрічку вміст списку vowels
Згадуємо лабораторну роботу №4 сторінка 7
[char for phone in pron for char in phone if char.isdigit()] Отже є приклад, де є два оператори for та оператор if. У нас подібний цикл.
Починаємо робити перші спроби
спочатку спробуємо опустити цикл по words, і вирішити задачу для одного word
>>> words = ['attribution', 'confabulation', 'elocution','sequoia', 'tenacious', 'unidirectional']
>>> vsequences = set()
>>> word='attribution'
>>> [char for char in word if char in 'aeiou']
['a', 'i', 'u', 'i', 'o']
Отримали голосні одного слова, а саме список vowels
Тепер над цим списком зробимо необхідні операції (до vsequences(набір) додаємо перетворений у стрічку вміст списку vowels)
>>> [vsequences.add(''.join(vowels)) for vowels in [char for char in word if char in 'aeiou']]
[None, None, None, None, None]
Ці None сильно лякають.... але поглянемо
>>> vsequences
set(['a', 'i', 'u', 'o'])
Те що треба...
Важливий момент char for char in word if char in 'aeiou' мусять бути в квадратних дужках бо ми працюємо зі списком vowels.
Залишилося додати for word in words
>>> [vsequences.add(''.join(vowels)) for vowels in [[char for char in word if char in 'aeiou'] for word in words]]
Тут також додалися квадратні дужки [[char for char in word if char in 'aeiou'] for word in words]]
Переглядаємо результат
>>> sorted(vsequences)
['aiuio', 'eaiou', 'eouio', 'euoia', 'oauaio', 'uiieioa']
Дякуємо Палій Зоряні, яка запропонувала це рішення під час навчання в магістратурі.