forked from kennyyu/bootcamp-python
-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathexercises.py
More file actions
102 lines (89 loc) · 3 KB
/
exercises.py
File metadata and controls
102 lines (89 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# PROB 1
# Return the number of words in the string s. Words are separated by spaces.
# e.g. num_words("abc def") == 2
def num_words(s):
return len(s.split())
# PROB 2
# Return the sum of all the numbers in lst. If lst is empty, return 0.
def sum_list(lst):
return sum(lst)
# PROB 3
# Return True if x is in lst, otherwise return False.
def appears_in_list(x, lst):
return x in lst
# PROB 4
# Return the number of unique strings in lst.
# e.g. num_unique(["a", "b", "a", "c", "a"]) == 3
def num_unique(lst):
s = set(lst)
return len(s)
# PROB 5
# Return a new list, where the contents of the new list are lst in reverse order.
# e.g. reverse_list([3, 2, 1]) == [1, 2, 3]
def reverse_list(lst):
return list(reversed(lst))
# PROB 6
# Return a new list containing the elements of lst in sorted decreasing order.
# e.g. sort_reverse([5, 7, 6, 8]) == [8, 7, 6, 5]
def sort_reverse(lst):
return list(reversed(sorted(lst)))
# PROB 7
# Return a new string containing the same contents of s, but with all the
# vowels (upper and lower case) removed. Vowels do not include 'y'
# e.g. remove_vowels("abcdeABCDE") == "bcdBCD"
def remove_vowels(s):
return s.translate(None, 'aeiouAEIOU')
# PROB 8
# Return the longest word in the lst. If the lst is empty, return None.
# e.g. longest_word(["a", "aaaaaa", "aaa", "aaaa"]) == "aaaaaa"
def longest_word(lst):
if len(lst) == 0:
return None
else:
sorted_lst = sorted(lst, key=len, reverse=True)
return sorted_lst[0]
# PROB 9
# Return a dictionary, mapping each word to the number of times the word
# appears in lst.
# e.g. word_frequency(["a", "a", "aaa", "b", "b", "b"]) == {"a": 2, "aaa": 1, "b": 3}
def word_frequency(lst):
freq = {}
for word in lst:
if not word in freq:
freq[word] = 1
else:
freq[word] += 1
return freq
# PROB 10
# Return the tuple (word, count) for the word that appears the most frequently
# in the list, and the number of times the word appears. If the list is empty, return None.
# e.g. most_frequent_word(["a", "a", "aaa", "b", "b", "b"]) == ("b", 3)
# I looked at solutions but I understand it
def most_frequent_word(lst):
if len(lst) == 0:
return None
else:
freq = word_frequency(lst)
freq_lst = sorted(freq.items(), key=lambda (word, count): count, reverse = True)
return freq_lst[0]
# PROB 11
# Compares the two lists and finds all the positions that are mismatched in the list.
# Assume that len(lst1) == len(lst2). Return a list containing the indices of all the
# mismatched positions in the list.
# e.g. find_mismatch(["a", "b", "c", "d", "e"], ["f", "b", "c", "g", "e"]) == [0, 3]
def find_mismatch(lst1, lst2):
n = 0
diff = []
while n < len(lst1):
if lst1[n] != lst2[n]:
diff.append(n)
n += 1
return diff
# PROB 12
# Returns the list of words that are in word_list but not in vocab_list.
def spell_checker(vocab_list, word_list):
diff = []
for word in word_list:
if not word in vocab_list:
diff.append(word)
return diff