Python 05 List Tuple
Python 05 List Tuple
Agenda
• List
• Tuple
• Exercise
2
List
Lists
• list: Python's equivalent to Java's array (but cooler)
– Declaring:
name = [value, value, ..., value] or,
name = [value] * length
4
Indexing
• Lists can be indexed using positive or negative
numbers:
>>> scores = [9, 14, 12, 19, 16, 7, 24, 15]
[9, 14, 12, 19, 16, 7, 24, 15]
>>> scores[3]
19
>>> scores[-3]
7
index 0 1 2 3 4 5 6 7
value 9 14 12 19 16 7 24 15
index -8 -7 -6 -5 -4 -3 -2 -1
5
Recall: Strings
index 0 1 2 3 4 5 6 7
value P . D i d d y
-index -8 -7 -6 -5 -4 -3 -2 -1
6
Slicing
• slice: A sub-list created by specifying start/end
indexes
name[start:end] # end is exclusive
name[start:] # to end of list
name[:end] # from start of list
name[start:end:step] #
>>> scores = [9, 14, 12, 19, every
16, step'th
18, 24, 15] value
>>> scores[2:5]
[12, 19, 16]
>>> scores[3:]
[19, 16, 18, 24, 15]
>>> scores[:3]
[9, 14, 12]
>>> scores[-3:] index 0 1 2 3 4 5 6 7
[18, 24, 15]
value 9 14 12 19 16 18 24 15
index -8 -7 -6 -5 -4 -3 -2 -1 7
Other List Abilities
– Lists can be printed (or converted to string with str()).
– Find out a list's length by passing it to the len function.
– Loop over the elements of a list using a for ... in loop.
>>> scores = [9, 14, 18, 19]
>>> print("My scores are", scores)
My scores are [9, 14, 18, 19]
>>> len(scores)
4
>>> total = 0
>>> for score in scores:
... print("next score:", score)
... total += score
next score: 9
next score: 14
next score: 18
next score: 19
>>> total
60
8
Ranges, Strings, and Lists
• The range function returns a list.
>>> nums = range(5)
>>> nums
[0, 1, 2, 3, 4]
>>> nums[-2:]
[3, 4]
>>> len(nums)
5
9
String Splitting
• split breaks a string into a list of tokens.
name.split() # break by
whitespace
name.split(delimiter) # break by delimiter
>>> f = open("example.txt")
>>> line = f.readline()
>>> line
'hello world 42 3.14\n'
12
Exercise Answer
hours.py
1 file = open("hours.txt")
2 for line in file:
3 tokens = line.split()
4 id = tokens[0]
5 name = tokens[1]
6
7 # cumulative sum of this employee's hours
8 hours = 0.0
9 days = 0
10 for token in tokens[2:]:
11 hours += float(token)
12 days += 1
13
14 print(name, "ID", id, "worked", \
15 hours, "hours:", hours / days, "/ day")
13
Exercise
• Suppose we have a file of midterm scores,
scores.txt:
76
89
76
72
68
14
Exercise
• Suppose we have Internet Movie Database (IMDb)
data:
1 9.1 196376 The Shawshank Redemption (1994)
2 9.0 139085 The Godfather: Part II (1974)
3 8.8 81507 Casablanca (1942)
15
Exercise Answer
movies.py
1 search_word = input("Search word? ")
2 matches = 0
3 file = open("imdb.txt")
4 for line in file:
5 tokens = line.split()
6 rank = int(tokens[0])
7 rating = float(tokens[1])
8 votes = int(tokens[2])
9 title = " ".join(tokens[3:])
10
11 # does title contain search_word?
12 if search_word.lower() in title.lower():
13 matches += 1
14 print(rank, "\t", votes, "\t", rating, "\t", title)
15
16 print(matches, "matches.")
16
Tuple
Tuple
tuple_name = (value, value, ..., value)
– A way of "packing" multiple values into one variable
>>> x = 3
>>> y = -5
>>> p = (x, y, 42)
>>> p
(3, -5, 42)
19
Tuple as Parameter
def name( (name, name, ..., name), ... ):
statements
20
Tuple as Return
def name(parameters):
statements
return (name, name, ..., name)
21
Exercise
• Write a program that performs a graphical "random walk".
– Create a DrawingPanel of size 150x150.
– Draw a circle of radius 75.
– Start a "walker" pixel at (75, 75), the circle's center.
– Every 10 ms, randomly move the walker by 1 pixel in
either the x or y direction and redraw the walker.
– Once the walker reaches the edge of the circle, stop walking.
• Key questions:
– How do we randomly move by 1 pixel?
– How do we know when we have reached
the edge of the circle?
22