Мартин обнови решението на 18.03.2014 17:44 (преди над 10 години)
+from collections import Counter
+
+
+def is_pangram(string):
+ pangram = set('ахчуднабългарсказемьополюшвайцъфтящижита')
+ string = string.lower()
+ string_set = set(string)
+
+ for letter in pangram:
+ if not letter in string_set:
+ return False
+ return True
+
+
+def char_histogram(text):
+ return dict(Counter(text))
+
+
+def cmp_to_key(comparator):
+
+ class K(object):
+ def __init__(self, obj, *args):
+ self.obj = obj
+
+ def __lt__(self, other):
+ return comparator(self.obj, other.obj) < 0
+
+ return K
+
+
+def sort_by(func, arguments):
+ return sorted(arguments, key=cmp_to_key(func))
+
+
+def group_by_type(dictionary):
+ result = dict()
+ for element in dictionary:
+ if result.__contains__(type(element)):
+ result[type(element)][element] = dictionary[element]
+ pass
+ else:
+ result[type(element)] = {element: dictionary[element]}
+ return result
+
+
+def is_anagram(word1, word2):
+ return Counter(word1) == Counter(word2)
+
+
+def anagrams(words):
+ mylist = list()
+
+ for word in words:
+ found = False
+ for i in range(len(mylist)):
+ if is_anagram(word, mylist[i][0]):
+ mylist[i].append(word)
+ found = True
+ break
+ if not found:
+ mylist.append([word])
+
+ return mylist
- проверката ти в
is_anagram
се прави за всички симоволи, а трябва да е за букви и да не прави разлика м/у малка и голяма -
result.__contains__(type(element))
използвайitem in my_collection
за проверка дали нещо е в дадена коолекция - литералния синтаксис е за предпочитане пред конструкция
{}
/[]
по-добре отdict()
/list()
- когато итерираш през речник и ще ти трябват двойките ключ и стойност използвай
dict.keys()
- този
pass
го махни mylist
е лошо име. Включва типа, не спазва конвенцията и не носи никаква информация за какво го ползваш. Смени го!K
също