Денис обнови решението на 16.03.2014 17:15 (преди над 10 години)
+def is_pangram(sentence):
+ bg_alphabet="абвгдежзийклмнопрстуфхцшщъьюя"
+ return len([x for x in bg_alphabet if x not in sentence.lower()]) == 0
+
+def sort_by(func, arguments):
+ for j in range(0, len(arguments)-1):
+
+ for i in range(j+1, len(arguments)):
+ print(arguments)
+ if func(arguments[j], arguments[i]) > 0:
+ argument=arguments[j]
+ arguments[j]=arguments[i]
+ arguments[i]=argument
+ return arguments
+
+
+def anagrams(words):
+ list_anagrams, all_anagrams=[], []
+ for i in range(len(words)):
+ for j in range(len(words)):
+ if not ''.join([x for x in words[j].lower()
+ if x not in words[i].lower()]).islower():
+ list_anagrams.append(words[j])
+ if list_anagrams not in all_anagrams:
+ all_anagrams.append(list_anagrams)
+ list_anagrams=[]
+ return all_anagrams
+
+def char_histogram(text):
+ dict_histogram={}
+ for x in text:
+ if x in dict_histogram:
+ dict_histogram[x]+=1
+ else:
+ dict_histogram[x]=1
+ return dict_histogram
+
+def group_by_type(dictionary):
+ type_dictionary={}
+ for i in dictionary:
+ type_dictionary[type(i)]={x:dictionary[x] for x in dictionary
+ if type(x) == type(i)}
+ return type_dictionary
-
bulgarian_alphabet
иначе чужденец няма да го разбере - ред 6 - интервали около оператора
- ред 7 - не бих сложил празен ред, защото не разделяш вътрешния
for
от нищо, което да е смислово групирано - ред 9 - не оставяй
print
-ове -
питонски swap -
a, b = b, a
- сортировката не ти е стабилна; тоест ако направим следното
sort_by(lambda x, y: len(x) - len(y), ['a', 'ab', 'b', 'bc', 'c'])
получаваме['a', 'b', 'c', 'bc', 'ab']
;'ab'
и'bc'
имат равни дължини и'ab'
беше преди'bc'
в несортирания списък, но сега не е; това означава сортировката да не е стабилна - не слагай типове в имената
-
char_histogram
можеш да я подобриш като си прегледаш хитринките - в
group_by_type
има подравняване на dict comprehension, което не е правилно спрямо PEP8, и отново липсват интервали около операторите - можеш да се опиташ да подобриш и
group_by_type
с хитринките - премисли пак
if not ''.join([x for x in words[j].lower()
if x not in words[i].lower()]).islower():
...
доста време ми трябваше, за да разбера как работи и мисля, че не си искал да напишеш точно това условие; връзката се губи, когато всяко x
се взима от words[j].lower()
, тоест трябва да е lower и в следващия момент идва .islower()
, което какво проверява при положение, че всичко в низа ще е lower