for
Loops with Setsmin
And max
with SetsYou can connect to Gradescope to take weekly graded quiz today during the last 15 minutes of the class.
Once you start the quiz you have 15 minutes to finish it.
You can only take this quiz today.
There is not makeup for the weekly quiz because Gradescope does not permit it.
I have posted a solution to homework 3 here.
Let's take a look.
I have posted homework 5 here.
It is due this coming Sunday at 11:59 PM.
Are there any questions before I begin?
if
statements and while
loops need boolean valuesWiliam Campbell (Bill)
if
statement
if preferred: preferred = "(" + preferred + ")"
if len(preferred) > 0: preferred = "(" + preferred + ")"
x ∈ A
A ⊂ B
B ⊃ A
A ∪ B
A ∩ B
A - B
A Δ B
set
functionset
takes a single argument for
loopset
>>> num_list = [1,2,3] >>> num_set = set(num_list) >>> num_set {1, 2, 3}
>>> list_1 = [1, 2, 3, 4, 5] >>> type(list_1) <class 'list'>
>>> nonsense = {'foo', 'bar', 'bletch'} >>> type(nonsense) <class 'set'>
>>> empty = [] >>> type(empty) <class 'list'>
>>> empty = {} >>> type(empty) <class 'dict'>
set
with no arguments
>>> set_1 = set() >>> set_1 set()
>>> set_2 = ()
>>> type(set_2) <class 'tuple'>
empty_set = set()
>>> empty_set set()
>>> s1 = set() >>> s1 set()
>>> s1.add(1) >>> s1 {1} >>> s1.add('two') >>> s1 {1, 'two'} >>> s1.add((3,3,3)) >>> s1 {(3, 3, 3), 1, 'two'}
>>> s1.add(1) >>> s1 {(3, 3, 3), 1, 'two'}
>>> s2 = set() >>> s2 set() >>> s2.update([1, 2, 3]) >>> s2 {1, 2, 3} >>> s2.update('foo') >>> s2 {1, 2, 3, 'f', 'o'}
>>> numb_set {1, 2, 3, 4, 5} >>> numb_set.discard(2) >>> numb_set {1, 3, 4, 5} >>> numb_set.remove(4) >>> numb_set {1, 3, 5}
>>> numb_set.discard(2) >>> numb_set {1, 3, 5}
>>> numb_set.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4
len
function gives the size of a set
>>> s1 = {1, 2, 3} >>> len(s1) 3 >>> s2 = {3, 2, 1} >>> len(s2) 3 >>> s3 = {'one', 'two', 'three', 'four'} >>> len(s3) 4
len
function on each to get their size>>> list_1 = [1, 2, 3] >>> list_2 = [3, 2, 1] >>> list_1 == list_2 False
>>> s1 = {1, 2, 3} >>> s2 = {3, 2, 1} >>> s1 == s2 True
>>> tuple_set = {(1,2), (3,4), (5,6)} >>> tuple_set {(5, 6), (1, 2), (3, 4)}
>>> list_set = {[1,2], [3,4], [5,6]}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> a, b, c = 1, 2, 3 >>> A = {a, b, c} >>> A {1, 2, 3} >>> a = 5 >>> A {1, 2, 3}
for
Loops with Setsfor
loopfor
loop looks like this
for LOOP_VARIABLE in ITERABLE_OBJECT:
STATEMENT
...
>>> s1 = {1, 2, 3, 4, 5} >>> for number in s1: ... print(number) ... 1 2 3 4 5 >>> s2 = {'one', 'two', 'three', 'four', 'five'} >>> for number in s2: ... print(number) ... two five three one four
>>> list_1 = [1, 2, 3, 4, 5] >>> for number in list_1: ... print(number) ... 1 2 3 4 5 >>> list_2 = [5, 4, 3, 2, 1] >>> for number in list_2: ... print(number) ... 5 4 3 2 1
in
operator
>>> list_1 [5, 4, 3, 2, 1] >>> 7 in list_1 False >>> 5 in list_1 True
in
operator ...>>> s1 {1, 2, 3, 4, 5} >>> 7 in s1 False >>> 8 in s1 False >>> 3 in s1 True
not in
operator
>>> 8 not in s1 True >>> 3 not in s1 False
not in
are two words ...A ∪ B
>>> A = {1, 4, 8, 12} >>> B = {1, 2, 6, 8} >>> A.union(B) {1, 2, 4, 6, 8, 12}
A ∪ B
B ∪ A
>>> B.union(A) {1, 2, 4, 6, 8, 12}
>>> A | B {1, 2, 4, 6, 8, 12}
>>> B | A {1, 2, 4, 6, 8, 12}
A ∩ B
>>> A {8, 1, 12, 4} >>> B {8, 1, 2, 6} >>> A.intersection(B) {8, 1}
A ∩ B = B ∩ A
>>> B.intersection(A) {8, 1}
>>> A & B {8, 1}
>>> B & A {8, 1} A & B == B & A True
A
that are
not in B
A - B
>>> A {8, 1, 12, 4} >>> B {8, 1, 2, 6} A.difference(B) {12, 4}
A - B ≠ B - A
>>> B.difference(A) {2, 6}
>>> A - B {12, 4}
>>> A - B == B - A False >>> A - B != B - A True
A Δ B
>>> A {8, 1, 12, 4} >>> B {8, 1, 2, 6} >>> A.symmetric_difference(B) {2, 4, 6, 12}
A Δ B = B Δ A
B.symmetric_difference(A) {2, 4, 6, 12}
A ^ B {2, 4, 6, 12}
>>> A ^ B == B ^ A True
Operator | Operation |
---|---|
| | union |
& | intersection |
- | difference |
^ | symmetric difference |
>>> s1 = {1,3,5} >>> s2 = {2,4,6} >>> s1 | s2 {1, 2, 3, 4, 5, 6}
>>> n1 = 3 >>> n2 = 5 >>> n1 += n2 >>> n1 8
s1 = s1 | s2
>>> s1 |= s2 >>> s1 {1, 2, 3, 4, 5, 6}
>>> A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} >>> B = {1, 3, 5, 7, 9}
>>> A.issubset(B) False >>> B.issubset(A) True
>>> A <= B False >>> B <= A True
>>> A.issuperset(B) True >>> B.issuperset(A) False
>>> A >= B True >>> B >= A False
>>> odds = {1, 3, 5, 7, 9} >>> evens = {2, 4, 6, 8, 10} >>> evens.isdisjoint(odds) True
>>> odds.isdisjoint(even) True
>>> D = {1, 2, 3, 4, 5} >>> D {1, 2, 3, 4, 5} >>> D.clear() >>> D set()
min
And max
with Setsmax
built-in function
>>> B = {1, 3, 5, 7, 9} >>> max(B) 9
min
function
>>> min(B) 1
>>> s1 ={1, "q", 5, "kk", 87} >>> max(s1) Traceback (most recent call last): File "<;stdin>;", line 1, in <module> TypeError: '>' not supported between instances of 'str' and 'int' >>> min(s1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: '<' not supported between instances of 'str' and 'int'
emails_1 = [] emails_2 = [] for line in email_file_1: emails_1.append(line.strip()) for line in email_file_2: emails_2.append(line.strip())
emails_new = emails_1[:]
for email in emails_2: if email not in emails_new: emails_new.append(email)
$ ./merge_emails_1.py Email file 1: emails_1.txt Email file 2: emails_2.txt List 1 Glenn.Hoffman@umb.edu big_bill@hotmail.com larry.wall@gmail.com timsmith@yahoo.com bigorangeshithead@whitehouse.gov List 2 Glenn.Hoffman@umb.edu alanh@hotmail.com timsmith@yahoo.com davidm@mac.com billybob@cs.umb.edu Merged list Glenn.Hoffman@umb.edu big_bill@hotmail.com larry.wall@gmail.com timsmith@yahoo.com bigorangeshithead@whitehouse.gov alanh@hotmail.com davidm@mac.com billybob@cs.umb.edu
emails_new = emails_1.union(emails_2)
>>> it244 = {"01459659", "00709552", "01565798", "00974687", "01357397", "01107434", ... "01516157", "01470962", "01015502", "01283749", "01313387", "01113342", ... "01684609", "01018750", "01458680", "01530289", "01600144"} >>> it116 = {"01276750", "01246473", "01146053", "01361550", "01330451", "01405338", ... "01240592", "01328324", "01393077", "00822499", "01158165", "01342910", ... "01559794", "01293714", "01352486", "01367216", "01165111", "01617531", ... "01485027", "01397047", "01459659"}
>>> a = 01684609
File "<stdin>", line 1
a = 01684609
^
SyntaxError: invalid token
>>> it244.intersection(it116) {'01459659'}
>>> all_students = it244 | it116
>>> len(it244) 17 >>> len(it116) 21 >>> len(all_students) 37
>>> athletes = basketball | baseball
>>>report_needed = all_students & athletes >>> report_needed {'01146053', '01015502', '01367216', '01330451'}
create a tuple of first names
create a tuple of last names
ask the user for the number of names required
create an empty set full_names
while the length of full_names is less than number required:
create a full name from a randomly chosen first name and last name
add this full name to full_names
for each name in full_names:
print the name