Download - Arrays (Lists) in Python
![Page 1: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/1.jpg)
Arrays (Lists) in Python
one thing after another
![Page 2: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/2.jpg)
Problem Given 5 numbers, read them in
and calculate their average THEN print out the ones that were
above average
![Page 3: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/3.jpg)
Data Structure Needed Need some way to hold onto all the
individual data items after processing them
making individual identifiers x1, x2, x3,... is not practical or flexible
the answer is to use an ARRAY a data structure - bigger than an
individual variable or constant
![Page 4: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/4.jpg)
An Array (a List) You need a way to have many variables
all with the same name but distinguishable!
In math they do it by subscripts or indexes x1, x2, x3 and so on
In programming languages, hard to use smaller fonts, so use a different syntax x [1], x[0], table[3], point[i]
![Page 5: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/5.jpg)
Semantics numbered from 0 to n-1 where n is
the number of elements 0 1 2 3 4 5
![Page 6: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/6.jpg)
Properties of an array (list) Heterogeneous (any data type!) Contiguous Have random access to any element Ordered (numbered from 0 to n-1) Number of elements can change very
easily (use method .append) Python lists are mutable sequences of
arbitrary objects
![Page 7: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/7.jpg)
Syntax Use [] to give initial value to, like x =
[1,3,5] refer to individual elements
uses [ ] with index in the brackets most of the time you don’t refer to the
whole array as one thing, or just by the array name (one time you can is when passing a whole array to a function as an argument)
![Page 8: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/8.jpg)
Python Programming, 2/e 8
List Operations you knowOperator Meaning
<seq> + <seq> Concatenation<seq> * <int-
expr>Repetition
<seq>[] Indexinglen(<seq>) Length<seq>[:] Slicing
for <var> in <seq>:
Iteration
<expr> in <seq> Membership (Boolean)
![Page 9: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/9.jpg)
9
Indexing an Array The index is also called the subscript In Python, the first array element always
has subscript 0, the second array element has subscript 1, etc.
Subscripts can be variables – they have to have integer values
k = 4 items = [3,9,’a’,True, 3.92] items[k] = 3.92 items[k-2] = items[2] = ‘a’
![Page 10: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/10.jpg)
Python Programming, 2/e 10
List Operations Lists are often built up one piece at
a time using append.nums = []x = float(input('Enter a number: '))while x >= 0: nums.append(x) x = float(input('Enter a number: '))
Here, nums is being used as an accumulator, starting out empty, and each time through the loop a new value is tacked on.
![Page 11: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/11.jpg)
Python Programming, 2/e 11
List OperationsMethod Meaning
<list>.append(x) Add element x to end of list.
<list>.sort() Sort (order) the list. A comparison function may be passed as a parameter.
<list>.reverse() Reverse the list.
<list>.index(x) Returns index of first occurrence of x.
<list>.insert(i, x) Insert x into list at index i.
<list>.count(x) Returns the number of occurrences of x in list.
<list>.remove(x) Deletes the first occurrence of x in list.
<list>.pop(i) Deletes the ith element of the list and returns its value.
![Page 12: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/12.jpg)
Using a variable for the size It is very common to use a variable to
store the size of an array SIZE = 15 arr = [] for i in range(SIZE):
arr.append(i) Makes it easy to change if size of
array needs to be changed
![Page 13: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/13.jpg)
Solution to starting problemSIZE = 5n = [0]*SIZEtotal = 0for ct in range(SIZE):
n[ct] = float(input("enter a number “))total = total + n[ct]
cont'd on next slide
![Page 14: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/14.jpg)
Solution to problem - cont'd
average = total / SIZEfor ct in range(5):
if n[ct] > average: print (n[ct])
![Page 15: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/15.jpg)
Scope of counter in a for loop The counter variable has usual
scope (body of the function it’s in) for i in range(5):
counter does exist after for loop finishes
what‘s its value after the loop?
![Page 16: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/16.jpg)
Initialization of arrays a = [1, 2, 9, 10] # has 4 elements a = [0] * 5 # all are zero
![Page 17: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/17.jpg)
Watch out index out of range! Subscripts range from 0 to n-1 Interpreter WILL tell you if an index
goes out of that range BUT the negative subscripts work as
they do with strings (which are, after all, arrays of characters)
x = [5]*5 x[-1] = 4 # x is [5,5,5,5,4]
![Page 18: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/18.jpg)
18
Assigning Values to Individual Array Elements
temps = [0.0] * 5m = 4temps[2] = 98.6;temps[3] = 101.2;temps[0] = 99.4;temps[m] = temps[3] / 2.0;temps[1] = temps[3] - 1.2; // What value is assigned?
temps[0] temps[1] temps[2] temps[3] temps[4]
7000 7004 7008 7012 7016
99.4 ? 98.6 101.2 50.6
![Page 19: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/19.jpg)
19
What values are assigned?SIZE =5temps = [0.0]* SIZE for m in range(SIZE):
temps[m] = 100.0 + m * 0.2
for m in range(SIZE-1, -1, -1):print(temps[m])
temps[0] temps[1] temps[2] temps[3] temps[4]
7000 7004 7008 7012 7016
? ? ? ? ?
![Page 20: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/20.jpg)
Indexes Subscripts can be constants or
variables or expressions If i is 5, a[i-1] refers to a[4] and a[i*2]
refers to a[10] you can use i as a subscript at one
point in the program and j as a subscript for the same array later - only the value of the variable matters
![Page 21: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/21.jpg)
21
Variable Subscriptstemps = [0.0]*5m = 3 . . . . . .
What is temps[m + 1] ?
What is temps[m] + 1 ?
temps[0] temps[1] temps[2] temps[3] temps[4]
7000 7004 7008 7012 7016
100.0 100.2 100.4 100.6 100.8
![Page 22: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/22.jpg)
Random access of elements Problem : read in numbers from a file,
only single digits - and count them - report how many of each there were
Use an array as a set of counters ctr [0] is how many zero's, ctr[1] is how
many ones, etc. ctr[num] +=1 is the crucial
statement
![Page 23: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/23.jpg)
Parallel arrays Sometimes you have data of different
types that are associated with each other
like name (string) and GPA (float) You CAN store them in the same array
ar = [“John”, 3.24, “Mary”, 3.9, “Bob”, 2.7] You can also use two different arrays
"side by side"
![Page 24: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/24.jpg)
Parallel arrays, cont'dfor i in range(SIZE): name[i], gpa[i] = float(input(“Enter”))Logically the name in position i corresponds to the gpa in position iNothing in the syntax forces this to be true, you just have to program it to be so.
![Page 25: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/25.jpg)
25
Parallel Arrays
Parallel arrays are two or more arrays that have the same index range and whose elements contain related information, possibly of different data types
EXAMPLE SIZE = 50 idNumber = [“ “]*SIZE hourlyWage = [0.0] *SIZE parallel
arrays
![Page 26: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/26.jpg)
26
SIZE = 50idNumber = [“ “] *SIZE // Parallel arrays holdhourlyWage =[0.0] *SIZE // Related information
idNumber[0] 4562 hourlyWage[0] 9.68
idNumber[1] 1235 hourlyWage[1] 45.75
idNumber[2] 6278 hourlyWage[2] 12.71
. . . . . . . . . . . .
idNumber[48] 8754 hourlyWage[48] 67.96
idNumber[49] 2460 hourlyWage[49] 8.97
![Page 27: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/27.jpg)
Selection sort - 1-d arrayAlgorithm for the sort1. find the maximum in the list2. put it in the highest numbered element
by swapping it with the data that was at that location
3. repeat 1 and 2 for shorter unsorted list - not including highest numbered location
4. repeat 1-3 until list goes down to one
![Page 28: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/28.jpg)
Find the maximum in the list# n is number of elementsmax = a[0] # value of largest element
# seen so farfor i in range(1, n): # note start at 1, not 0
if max < a[i]:max = a[i]
# now max is value of largest element in list
![Page 29: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/29.jpg)
Find the location of the maxmax = 0 # max is now location of
the # largest seen so farfor i in range(1,n):
if a[max] < a[i]:max = i
# now max is location of the largest in # array
![Page 30: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/30.jpg)
Swap with highest numberedRemember element at right end of
list is numbered n-1 temp = a[max] a[max] = a[n-1] a[n-1] = temp# there is a shorter way in Python!
![Page 31: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/31.jpg)
The Python way! The previous code of finding the
max and its location will work in ANY high-level language.
Python has some nice functions and methods to make it easier!
Let’s try that.
![Page 32: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/32.jpg)
The Python Way To find the max of the whole list mx = max(a) loc = a.index(mx) Is using index SAFE here? If it doesn’t
find mx in a, it will crash!But you just got mx from the list using
the max function, so it IS in the list a.
![Page 33: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/33.jpg)
The Python Way The swap then becomes a[loc], a[n-1] = a[n-1],a[loc] Python “hides” the temporary third
variable
![Page 34: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/34.jpg)
Find next largest element and swap (generic way)max = 0;for i in range(1,n-1): # note n-1, not n
if a[max] < a[i]:max = i
temp = a[max]a[max] = a[n-2] a[n-2] = temp
![Page 35: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/35.jpg)
put a loop around the general code to repeat for n-1 passesfor pss in range(n, 1, -1): max = 0
for i in range(1,pss): if a[max] <= a[i]:max = i temp = a[max]
a[max] = a[pss-1] a[pss-1] = temp
![Page 36: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/36.jpg)
The whole thing the Python way for pss in range(n, 1, -1): # n-1 passes mx = max(a[0:pss]) loc = a.index(mx)
a[loc], a[pss-1] = a[pss-1], a[loc]
![Page 37: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/37.jpg)
2-dimensional arrays Data sometimes has more
structure to it than just "a list" It has rows and columns You use two subscripts to locate an
item The first subscript called “row”,
second called “column”
![Page 38: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/38.jpg)
2-dimensional arrays syntax
a = [[0]*5 for i in range(4)] # 5 columns, 4 rows
Twenty elements, numbered from [0][0] to [4][3]
a = [[0]*COLS for i in range(ROWS)] Which has ROWS rows and COLS columns in
each row (use of variables to make it easy to change the size of the array without having to edit every line of the program)
![Page 39: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/39.jpg)
39
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10][11]
66 64 72 78 85 90 99 105 98 90 88 80row 2,col 7might beArizona’shigh forAugust
EXAMPLE -- Array for monthly high temperatures for all 50 states
NUM_STATES = 50NUM_MONTHS = 12stateHighs = [[0]*NUM_MONTHS for i in range(NUM_STATES)]
[0] [1] [2] . .
stateHighs[2][7] . [48] [49]
![Page 40: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/40.jpg)
Processing a 2-d array by rowsfinding the total for the first row
for i in range(NUM_MONTHS):total = total + a[0][i]
finding the total for the second rowfor i in range(NUM_MONTHS):total = total + a[1][i]
![Page 41: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/41.jpg)
Processing a 2-d array by rows
total for ALL elements by adding first row, then second row, etc.
for i in range(NUM_STATES):for j in range(NUM_MONTHS):
total = total + a[i][j]
![Page 42: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/42.jpg)
Processing a 2-d array by columns
total for ALL elements by adding first column, second column, etc.
for j in range(NUM_MONTHS):for i in range(NUM_STATES):
total = total + a[i][j]
![Page 43: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/43.jpg)
43
Finding the average high temperature for Arizona
total = 0for month in range(NUM_MONTHS): total = total + stateHighs[2][month]average = round (total / NUM_MONTHS)
average
85
![Page 44: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/44.jpg)
Passing an array as an argument Arrays (lists) are passed by
reference = they CAN be changed permanently by the function
Definition def fun1 (arr): Call the function as
x = fun1 (myarr)
![Page 45: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/45.jpg)
Arrays versus Files Arrays are usually smaller than files Arrays are faster than files Arrays are temporary, in RAM - files
are permanent on secondary storage Arrays can do random or sequential,
files we have seen are only sequential
![Page 46: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/46.jpg)
46
Using Multidimensional Arrays
Example of three-dimensional array
![Page 47: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/47.jpg)
47
NUM_DEPTS = 5 # mens, womens, childrens, electronics, furniture NUM_MONTHS = 12 NUM_STORES = 3 # White Marsh, Owings Mills, TowsonmonthlySales = [[[0]*NUM_MONTHS for i in range(NUM_DEPTS)]
for j in range(NUM_STORES)]
monthlySales[3][7][0]sales for electronics in August at White Marsh
12 MONTHS columns
5 D
EPTS
ro
ws
3 STORES
sheets
![Page 48: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/48.jpg)
Example of filling a 3-d arraydef main(): NUM_DEPTS = 5 # mens, womens, childrens, electronics, furniture NUM_MONTHS = 12 NUM_STORES = 3 # White Marsh, Owings Mills, Towson monthlySales = [[[0]*NUM_MONTHS for i in range(NUM_DEPTS)] for j in range(NUM_STORES)] storeNames = ["White Marsh", "Owings Mills", "Towson"] deptNames = ["mens", "womens", "childrens", "electronics", "furniture"] for store in range(NUM_STORES): print (storeNames[store], end=" ") for dept in range(NUM_DEPTS): print (deptNames[dept], end = " ") for month in range(NUM_MONTHS): print("for month number ", month+1) monthlySales[store][dept] [month] = float(input("Enter the sales ")) print() print() print (monthlySales)
![Page 49: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/49.jpg)
Find the average of monthly_salestotal = 0for m in range(NUM_MONTHS):
for d in range(NUM_DEPTS):for s in range(NUM_STORES):total += monthlySales[s][d][m]
average = total / (NUM_MONTHS * NUM_DEPTS *
NUM_STORES)
![Page 50: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/50.jpg)
Problem: student data in a file The data is laid out as Name, section, gpa
John Smith, 15, 3.2 Ralph Johnson, 12, 3.9 Bob Brown, 9, 2.5 Etc.
![Page 51: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/51.jpg)
Read in the datainf = open(“students”,”r”)studs = []for line in inf:
data = line.split(“,”)studs.append(data)
inf.close()#studs looks like [[“John Smith”,15,3.2], #[“Ralph Johnson”,12,3.9],[“Bob Brown”…]]
![Page 52: Arrays (Lists) in Python](https://reader036.vdocuments.us/reader036/viewer/2022062520/56815b9c550346895dc9a2c6/html5/thumbnails/52.jpg)
Find the student with highest GPA
max = 0for j in range(1, len(studs)):
if studs[max][2] < studs[j][2]:max = j
#max is now location of highest gpastuds[max][0] is the name of the studentstuds[max][1] is the student’s section