Skip to content

Commit a1d8671

Browse files
committed
Useful examples of specific Python features
1 parent 6a229c0 commit a1d8671

File tree

84 files changed

+3549
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+3549
-0
lines changed

practices/hard_interview.py

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
class Link:
2+
def __init__(self, val, next=None):
3+
self.val = val
4+
self.next = next
5+
6+
def __str__(self):
7+
if not self.next:
8+
return f"Link({self.val})"
9+
return f"Link({self.val}, {self.next})"
10+
11+
def get_lst_val(self, lst_val):
12+
lst_val.append(self.val)
13+
if self.next is not None:
14+
self.next.get_lst_val(lst_val)
15+
return lst_val
16+
17+
18+
def merge_k_linked_lists(linked_lists):
19+
"""
20+
Merge the given Links recursively incorporated and sorted by value
21+
22+
:param linked_lists: List of Links with or without next Link
23+
:return: List of the sorted merged Links.
24+
25+
26+
>>> print(merge_k_linked_lists([Link(1)]))
27+
Link(1)
28+
29+
>>> print(merge_k_linked_lists([Link(2, Link(1))]))
30+
Link(1, Link(2))
31+
32+
>>> print(merge_k_linked_lists([
33+
... Link(1, Link(2, Link(5))),
34+
... Link(3, Link(4))
35+
... ]))
36+
Link(1, Link(2, Link(3, Link(4, Link(5)))))
37+
38+
>>> print(merge_k_linked_lists([
39+
... Link(2, Link(4)),
40+
... Link(2, Link(1)),
41+
... Link(3, Link(3)),
42+
... ]))
43+
Link(1, Link(2, Link(2, Link(3, Link(3, Link(4))))))
44+
"""
45+
values = [] # 0(k*n)
46+
47+
for link in linked_lists: # 0(k)
48+
# lst = []
49+
# for val in link.get_lst_val(lst):
50+
# values.append(val)
51+
while link: # 0(n)
52+
values.append(link.val)
53+
link = link.next
54+
values.sort(reverse=True) # 0(k*n*log(k*n))
55+
previous_lnk = None
56+
for val in values: # 0(k*n)
57+
lnk = Link(val, previous_lnk)
58+
previous_lnk = lnk
59+
60+
return lnk # 0(k*n*log(k*n))

practices/interview01_blank.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
def majority_element_indexes(lst):
2+
'''
3+
Returns a list of the majority element indexes.
4+
Majority element is the element that appears more than floor(n/2) times.
5+
If there is no majority element, return an empty list.
6+
7+
>>> majority_element_indexes([1,1,2])
8+
[0, 1]
9+
>>> majority_element_indexes([1,2])
10+
[]
11+
>>> majority_element_indexes([])
12+
[]
13+
>>> majority_element_indexes([1,1,2,1,3,1,3])
14+
[0, 1, 3, 5]
15+
>>> majority_element_indexes([1,3,2,3,4,3,3,1,3])
16+
[1, 3, 5, 6, 8]
17+
'''

practices/interview01_solution.py

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from collections import Counter
2+
3+
def majority_element_indexes(lst):
4+
'''
5+
Returns a list of the majority element indexes.
6+
Majority element is the element that appears more than floor(n/2) times.
7+
If there is no majority element, return an empty list.
8+
9+
>>> majority_element_indexes([1,1,2])
10+
[0, 1]
11+
>>> majority_element_indexes([1,2])
12+
[]
13+
>>> majority_element_indexes([])
14+
[]
15+
>>> majority_element_indexes([1,1,2,1,3,1,3])
16+
[0, 1, 3, 5]
17+
>>> majority_element_indexes([1,3,2,3,4,3,3,1,3])
18+
[1, 3, 5, 6, 8]
19+
'''
20+
c = Counter(lst)
21+
return [] if lst==[] or max(c, key=c.get) == min(c, key=c.get) \
22+
else [idx for idx,v in enumerate(lst) if v == max(c, key=c.get)]

practices/interview02_blank.py

+178
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
def closest_lt_or_eq(obj_list, val):
2+
'''
3+
Must return the closest value to obj_list that is less than or equal to the number val else None
4+
5+
>>> print(closest_lt_or_eq([1,2,4,7,12],1))
6+
1
7+
>>> print(closest_lt_or_eq([1,2,4,7,12],4))
8+
4
9+
>>> print(closest_lt_or_eq([1,2,4,7,12],6))
10+
4
11+
>>> print(closest_lt_or_eq([1,2,4,7,12],12))
12+
12
13+
>>> print(closest_lt_or_eq([1,2,4,7,12],23))
14+
None
15+
>>> print(closest_lt_or_eq([1,2,4,7,12],-1))
16+
None
17+
'''
18+
19+
20+
def largest_one_lt(liste, val):
21+
'''
22+
>>> print(largest_one_lt([1,4,7,12], 1)) # nb pairs, val min
23+
None
24+
>>> print(largest_one_lt([1,4,7,12], 12)) # nb pairs, val max
25+
7
26+
>>> print(largest_one_lt([1,4,7,12], 7)) # nb pairs, val existante
27+
4
28+
>>> print(largest_one_lt([1,4,7,12], 6)) # nb pairs, val inexsitante
29+
4
30+
>>> print(largest_one_lt([1,4,7,12], 23)) # nb pairs, val supérieure
31+
12
32+
>>> print(largest_one_lt([1,4,7,12], 0)) # nb pairs, val inférieure
33+
None
34+
>>> print(largest_one_lt([1,4,5,7,12], 1)) # nb impairs, val min
35+
None
36+
>>> print(largest_one_lt([1,4,5,7,12], 12)) # nb impairs, val max
37+
7
38+
>>> print(largest_one_lt([1,4,5,7,12], 7)) # nb impairs, val existante
39+
5
40+
>>> print(largest_one_lt([1,4,5,7,12], 6)) # nb impairs, val inexistante
41+
5
42+
>>> print(largest_one_lt([1,4,5,7,12], 23)) # nb impairs, val supérieure
43+
12
44+
>>> print(largest_one_lt([1,4,5,7,12], 0)) # nb impairs, val inférieure
45+
None
46+
>>> print(largest_one_lt([4], 4))
47+
None
48+
>>> print(largest_one_lt([], 4))
49+
None
50+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 1)) # nb impairs, val min
51+
None
52+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 29)) # nb impairs, val max
53+
27
54+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 24)) # nb impairs, val existante>12
55+
22
56+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 21)) # nb impairs, val inexistante>12
57+
20
58+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 5)) # nb impairs, val existante<12
59+
4
60+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 2)) # nb impairs, val inexistante<12
61+
1
62+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 0)) # nb impairs, val inférieure
63+
None
64+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 30)) # nb impairs, val supérieure
65+
29
66+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 1)) # nb pairs, val min
67+
None
68+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 29)) # nb pairs, val max
69+
27
70+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 24)) # nb pairs, val existante>12
71+
23
72+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 21)) # nb pairs, val inexistante>12
73+
20
74+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 5)) # nb pairs, val existante<12
75+
4
76+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 2)) # nb pairs, val inexistante<12
77+
1
78+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 0)) # nb pairs, val inférieure
79+
None
80+
>>> print(largest_one_lt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 30)) # nb impairs, val supérieure
81+
29
82+
'''
83+
84+
85+
86+
def smallest_one_gt(liste, val):
87+
'''
88+
>>> print(smallest_one_gt([1,4,7,12], 1)) # nb pairs, val min
89+
4
90+
>>> print(smallest_one_gt([1,4,7,12], 12)) # nb pairs, val max
91+
None
92+
>>> print(smallest_one_gt([1,4,7,12], 7)) # nb pairs, val existante
93+
12
94+
>>> print(smallest_one_gt([1,4,7,12], 6)) # nb pairs, val inexsitante
95+
7
96+
>>> print(smallest_one_gt([1,4,7,12], 23)) # nb pairs, val supérieure
97+
None
98+
>>> print(smallest_one_gt([1,4,7,12], 0)) # nb pairs, val inférieure
99+
1
100+
>>> print(smallest_one_gt([1,4,5,7,12], 1)) # nb impairs, val min
101+
4
102+
>>> print(smallest_one_gt([1,4,5,7,12], 12)) # nb impairs, val max
103+
None
104+
>>> print(smallest_one_gt([1,4,5,7,12], 7)) # nb impairs, val existante
105+
12
106+
>>> print(smallest_one_gt([1,4,5,7,12], 6)) # nb impairs, val inexistante
107+
7
108+
>>> print(smallest_one_gt([1,4,5,7,12], 23)) # nb impairs, val supérieure
109+
None
110+
>>> print(smallest_one_gt([1,4,5,7,12], 0)) # nb impairs, val inférieure
111+
1
112+
>>> print(smallest_one_gt([4], 4))
113+
None
114+
>>> print(smallest_one_gt([], 4))
115+
None
116+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 1)) # nb impairs, val min
117+
3
118+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 29)) # nb impairs, val max
119+
None
120+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 24)) # nb impairs, val existante>12
121+
26
122+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 21)) # nb impairs, val inexistante>12
123+
22
124+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 5)) # nb impairs, val existante<12
125+
7
126+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 2)) # nb impairs, val inexistante<12
127+
3
128+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 0)) # nb impairs, val inférieure
129+
1
130+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 30)) # nb impairs, val supérieure
131+
None
132+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 1)) # nb pairs, val min
133+
3
134+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 29)) # nb pairs, val max
135+
None
136+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 24)) # nb pairs, val existante>12
137+
26
138+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 21)) # nb pairs, val inexistante>12
139+
22
140+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 5)) # nb pairs, val existante<12
141+
7
142+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 2)) # nb pairs, val inexistante<12
143+
3
144+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,23,24,26,27,29], 0)) # nb pairs, val inférieure
145+
1
146+
>>> print(smallest_one_gt([1,3,4,5,7,8,9,12,13,14,16,17,18,20,22,24,26,27,29], 30)) # nb impairs, val supérieure
147+
None
148+
'''
149+
150+
151+
152+
153+
154+
155+
156+
157+
158+
159+
160+
161+
162+
163+
164+
165+
166+
167+
168+
169+
170+
171+
172+
173+
174+
175+
176+
177+
178+

0 commit comments

Comments
 (0)