-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbasic_module.py
More file actions
50 lines (48 loc) · 1.39 KB
/
basic_module.py
File metadata and controls
50 lines (48 loc) · 1.39 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
def flattenSequence(seq):
if not isinstance(seq, (list, tuple)):
raise TypeError("The seq is not a list or a tuple.")
def flattenSub(seq, res):
for element in seq:
if isinstance(element, (list, tuple)):
flattenSub(element, res)
else:
res.append(element)
res = []
flattenSub(seq, res)
return res
def ensureInstanceOfType(obj, type_, ignoreErrorTypes=None, default=None):
if isinstance(obj, type_):
return obj
if ignoreErrorTypes is not None:
ignoreErrorTypes = tuple(flattenSequence(seq))
else:
ignoreErrorTypes = ()
try:
res = type_(obj)
except ignoreErrorTypes:
res = default
return res
def findNum(l: list, num):
"""Find the position of the num in the sorted list.
Return the left index,
or None if the num is less than the first element."""
assert isinstance(l, list)
if not l:
return None
l = sorted(l)
if num < l[0]:
return None
if num > l[-1]:
return len(l) - 1
left = 0
right = len(l) - 1
middle = (left + right) // 2
while middle > left:
if num < l[middle]:
right = middle
elif num > l[middle]:
left = middle
else:
break
middle = (left + right) // 2
return middle