вівторок, 8 грудня 2009 р.

Задача №15 Лабораторна робота №5

Перепишіть наступний цикл як 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']

1 коментар:

  1. Для успішного вирішення завдання потрібно спочатку розібратись, як працює цей цикл.

    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']

    Дякуємо Палій Зоряні, яка запропонувала це рішення під час навчання в магістратурі.

    ВідповістиВидалити