-
Notifications
You must be signed in to change notification settings - Fork 0
/
list.py
127 lines (89 loc) · 2.53 KB
/
list.py
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# LIST - heterogeneous mutable sequence
l = 'hello world hello people'.split()
# ['hello', 'world', 'hello', 'people']
l[1]
# 'world'
l[-3]
# 'world'
#slice
l[1:3]
# ['world', 'hello']
l[1:] # <-- till the end
# ['world', 'hello', 'people']
l[:1] # <-- till (but NOT including) 1
# ['hello']
idx = l.index('world')
# 0
idx = l.index('planet')
# ERROR !!!
l.count('hello')
# 2
# membership testing
'hello' in l
# True
'hello' not in l
# False
# FULL SLICE (full copy), SHALLOW !!!
full_slice = l[:]
full_slice = l.copy() # <-- same, more readable
full_slice = list(l) # <-- same via list Ctor
full_slice is l # not same object
# False
full_slice == l # same content (incl. same order)
# True
# remove item from list
l.pop(2) # <-- remove item by POSITION (returns the removed item)
# world
del l[1] # <-- remove item by POSITION (splice)
# None
l.remove('people') # <-- remove item by VALUE
# None
l.insert(2, 'pears') # ['hello', 'world,', 'pears', 'hello', 'people']
# None
# concat lists
l1 = [1, 2, 3]
l2 = [4, 5, 6]
l3 = l1 + l2
# [1, 2, 3, 4, 5, 6]
# Repeat list using * operator
s = l * 3 # [1, 2, 3, 1, 2, 3, 1, 2, 3]
l3.extend([-5, -6, -7]) # [1, 2, 3, 4, 5, 6, -5, -6, -7]
# None
l1.append(['pears', 'apples']) # <-- takes exactly 1 arg, [1, 2, 3, ['pears', 'apples]]
# None
'_'.join(l)
# hello_world,_hello_people
# Iterate (!!! list does NOT support .keys(), .values(), .items())
# enumerate() yields tuples (index, value)
t = [100, 200, 300]
for p in enumerate(t):
print(p)
# (0, 100)
# (1, 200)
# (2, 300)
for idx, val in enumerate(t): # <-- with tuple unpacking (idx, val - or whatever naming is liked)
print(idx, val)
# 0 100
# 1 200
# 2 300
# Sorting
l3.sort() # [-7, -6, -5, 1, 2, 3, 4, 5, 6]
l3.sort(reverse=True)
l3.reverse() # <-- same reverse, more explicit
l1 = 'hi my name is sam'.split()
l1.sort(key=len)
['hi', 'my', 'is', 'sam', 'name']
l2 = [19, 10, 33]
new_sorted_list = sorted(l2) # <-- i2 stays [19, 10, 33]
# [10, 19, 33]
new_reversed_list_2 = reversed(l2)
res = list(new_reversed_list_2)
# [33, 10, 19]
# sort list of dictionaries
l = [{'name': 'John', 'age': 33}, {'name': 'Peter', 'age': 20}, {'name': 'Rick', 'age': 42}]
sorted(l, key = lambda person: person['age'])
# [{'name': 'Peter', 'age': 20}, {'name': 'John', 'age': 33}, {'name': 'Rick', 'age': 42}]
# find (FIRST occurrence)
lst = [2, 4, 33, 11]
target = next((x for x in lst if x > 10), None)
# 33