Решение на Пет функции от Стефан Василев

Обратно към всички решения

Към профила на Стефан Василев

Резултати

  • 10 точки от тестове
  • 0 бонус точки
  • 10 точки общо
  • 16 успешни тест(а)
  • 0 неуспешни тест(а)

Код

from itertools import groupby
from functools import cmp_to_key
def is_pangram(words):
return len(set([x for x in words.lower() if x in "абвгдежзийклмнопрстуфхцчшщъьюя"])) == 30
def char_histogram(sentence):
return {letter: sentence.count(letter) for letter in sentence}
def sort_by(func, arguments):
return sorted(arguments, key=cmp_to_key(func))
def group_by_type(dictionary):
grouped = {type(key): {key: value} for key, value in dictionary.items()}
for key, value in dictionary.items():
grouped[type(key)] = dict(list(grouped[type(key)].items()) + list({key: value}.items()))
return grouped
def anagram_key(word):
return sorted(map(str.lower, filter(str.isalpha, word)))
def anagrams(words):
return [list(data) for key, data in groupby(sorted(words, key=anagram_key), anagram_key)]

Лог от изпълнението

................
----------------------------------------------------------------------
Ran 16 tests in 0.009s

OK

История (2 версии и 1 коментар)

Стефан обнови решението на 16.03.2014 22:08 (преди над 10 години)

+from itertools import groupby
+from functools import cmp_to_key
+
+def is_pangram(words):
+ return len(set([x for x in words.lower() if x in "абвгдежзийклмнопрстуфхцчшщъьюя"])) == 30
+
+def char_histogram(sentence):
+ return {letter: sentence.count(letter) for letter in sentence}
+
+def sort_by(func, arguments):
+ return sorted(arguments, key = cmp_to_key(func))
+
+def group_by_type(dictionary):
+ grouped = {type(key): {key: value} for key, value in dictionary.items()}
+ for key, value in dictionary.items():
+ grouped[type(key)] = dict(list(grouped[type(key)].items()) + list({key: value}.items()))
+ return grouped
+
+def anagram_hash(word):
+ return {sign: word.count(sign) for sign in word if sign in "abcdefghijklmnopqrstuvwxyz"}
+
+def anagrams(words):
+ return [list(data) for key, data in groupby(words, lambda x: anagram_hash(x.lower()))]

Здравейте, знам че редовете пак са дългички, ама сърце не ми дава ги скъся, че ще стане по 5 реда функция. Както и да е това не ми е единствения проблем. Проблема ми е в решението на последната функция, тоест последните 2. Тоя код работи само ако аргумента words на anagrams съдържа подредени анаграми. Например:

anagrams(['asd', 'dsa', 'da']) връща

[['asd, 'dsa'], ['da']] , което е вярно. Но ако:

anagrams(['asd', 'da', 'dsa']) връща

[['asd'], ['da'], ['dsa']], което е невярно.

Оставам с впечатление, че groupby работи само върху последователни данни. Така ли е или аз някъде греша. Ако може малко помощ, моля. Ще съм много благодарен.

Стефан обнови решението на 19.03.2014 14:35 (преди над 10 години)

from itertools import groupby
from functools import cmp_to_key
def is_pangram(words):
return len(set([x for x in words.lower() if x in "абвгдежзийклмнопрстуфхцчшщъьюя"])) == 30
def char_histogram(sentence):
return {letter: sentence.count(letter) for letter in sentence}
def sort_by(func, arguments):
- return sorted(arguments, key = cmp_to_key(func))
+ return sorted(arguments, key=cmp_to_key(func))
def group_by_type(dictionary):
grouped = {type(key): {key: value} for key, value in dictionary.items()}
for key, value in dictionary.items():
grouped[type(key)] = dict(list(grouped[type(key)].items()) + list({key: value}.items()))
return grouped
-def anagram_hash(word):
- return {sign: word.count(sign) for sign in word if sign in "abcdefghijklmnopqrstuvwxyz"}
+def anagram_key(word):
+ return sorted(map(str.lower, filter(str.isalpha, word)))
def anagrams(words):
- return [list(data) for key, data in groupby(words, lambda x: anagram_hash(x.lower()))]
+ return [list(data) for key, data in groupby(sorted(words, key=anagram_key), anagram_key)]