forked from SeattleTestbed/seattlelib_v2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
listops.r2py
132 lines (93 loc) · 2.61 KB
/
listops.r2py
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
128
129
130
"""
Author: Justin Cappos
Module: A simple library of list commands that allow the programmer
to do list composition operations
Start date: November 11th, 2008
This is a really simple module, only broken out to avoid duplicating
functionality.
This was adopted from previous code in seash.
I really should be using sets instead I think. These are merely for
convenience when you already have lists.
"""
def listops_difference(list_a,list_b):
"""
<Purpose>
Return a list that has all of the items in list_a that are not in list_b
Duplicates are removed from the output list
<Arguments>
list_a, list_b:
The lists to operate on
<Exceptions>
TypeError if list_a or list_b is not a list.
<Side Effects>
None.
<Returns>
A list containing list_a - list_b
"""
retlist = []
for item in list_a:
if item not in list_b:
retlist.append(item)
# ensure that a duplicated item in list_a is only listed once
return listops_uniq(retlist)
def listops_union(list_a,list_b):
"""
<Purpose>
Return a list that has all of the items in list_a or in list_b.
Duplicates are removed from the output list
<Arguments>
list_a, list_b:
The lists to operate on
<Exceptions>
TypeError if list_a or list_b is not a list.
<Side Effects>
None.
<Returns>
A list containing list_a union list_b
"""
retlist = list_a[:]
for item in list_b:
if item not in list_a:
retlist.append(item)
# ensure that a duplicated item in list_a is only listed once
return listops_uniq(retlist)
def listops_intersect(list_a,list_b):
"""
<Purpose>
Return a list that has all of the items in both list_a and list_b.
Duplicates are removed from the output list
<Arguments>
list_a, list_b:
The lists to operate on
<Exceptions>
TypeError if list_a or list_b is not a list.
<Side Effects>
None.
<Returns>
A list containing list_a intersect list_b
"""
retlist = []
for item in list_a:
if item in list_b:
retlist.append(item)
# ensure that a duplicated item in list_a is only listed once
return listops_uniq(retlist)
def listops_uniq(list_a):
"""
<Purpose>
Return a list that has no duplicate items
<Arguments>
list_a
The list to operate on
<Exceptions>
TypeError if list_a is not a list.
<Side Effects>
None.
<Returns>
A list containing the unique items in list_a
"""
retlist = []
for item in list_a:
if item not in retlist:
retlist.append(item)
return retlist