Умова. Написати програму для створення двовимірного масиву word_vowels елементами якого є набори. Програма повинна обробити список слів і додати кожне зі слів до word_vowels[l][v] де l – довжина слова, v – кількість голосних у слові.
Отже, якщо у мене, наприклад, список слів Іван, Петро, Василь -
то я повинен в комірку масиву з індексами 4,2 записати слово Іван, в комірку масиву з індексами 5,2 записати слово Петро, в комірку масиву з індексами 6,2 записати слово Василь.
import nltk
from nltk.corpus import brown
list_w=[w.lower() for w in brown.words()[:10]] # список слів
# побудова двовимірного масиву
# сторінка 12 лаб.робота №7
#>>> m, n = 3, 7
#>>> array = [[set() for i in range(n)] for j in range(m)]
#>>> array[2][5].add('Alice')
#>>> pprint.pprint(array)
#[[set([]), set([]), set([]), set([]), set([]), set([]), set([])],
#[set([]), set([]), set([]), set([]), set([]), set([]), set([])],
#[set([]), set([]), set([]), set([]), set([]), set(['Alice']), set([])]]
#m, n - розміри масиву
#як їх отримати,
#максимальне значення, яке може мати m - це довжина найдовшого слова зі списку
#максимальне значення, яке може мати n - це найбільша кількість голосних у слові зі списку
len_m_of_array=max([len(w) for w in list_w])
len_n_of_array=max([len([char for char in w if char in 'aoieu']) for w in list_w])
array = [[set() for i in range(len_n_of_array+1)] for j in range(len_m_of_array+1)]
# заповнення масиву
for w in list_w:
array[len(w)][len([char for char in w if char in 'aoieu'])].add(w)
# переглядаю масив
pprint.pprint(array)
Це рішення має одну проблему. Я два рази для кожного слова знаходжу його довжину та кількість голосних.
Перший раз при визначенні розміру масиву, а другий при його заповненні.
Потрібно подумати, як уникнути цих подвійних обчислень.
Немає коментарів:
Дописати коментар