# Chapter 8: Arrays¶

## Example 8.1, Page number: 256¶

In :
from array import *

# Variable declaration
word = array('c', ['H', 'e', 'l', 'l', 'o'])

# Result
print ('The contents of word [] is %s ' % ''.join(word))

The contents of word [] is Hello


## Example 8.2, Page number: 259¶

In :
from array import *

# Variable declaration
marks = *10
avg = 0

# Calculation and result
for i in range (0, 10) :
marks[i] = int(raw_input('Enter value in cell [%d] ' % i))
avg = avg + marks[i]

avg = avg/10
print ('The average marks are %f' % avg)

for i in range (0, 10) :
if marks[i] < avg :
print ('Marks in cell [%d] are %d less than average' % (i, marks[i]))
else :
print ('Marks in cell [%d] are %d above/equal to average' % (i, marks[i]))

Enter value in cell  45
Enter value in cell  78
Enter value in cell  65
Enter value in cell  43
Enter value in cell  56
Enter value in cell  98
Enter value in cell  53
Enter value in cell  82
Enter value in cell  74
Enter value in cell  39
The average marks are 63.000000
Marks in cell  are 45 less than average
Marks in cell  are 78 above/equal to average
Marks in cell  are 65 above/equal to average
Marks in cell  are 43 less than average
Marks in cell  are 56 less than average
Marks in cell  are 98 above/equal to average
Marks in cell  are 53 less than average
Marks in cell  are 82 above/equal to average
Marks in cell  are 74 above/equal to average
Marks in cell  are 39 less than average


## Example 8.3, Page number: 261¶

In :
from array import *

# Variable declaration
data = raw_input('Enter the string ')

# Calculation and result
rev_data = reversed (data)

if list (data) == list (rev_data) :
print ('The string %s is a PALINDROME' % data)
else :
print ('The string %s is not a PALINDROME' % data)

Enter the string MADAM
The string MADAM is a PALINDROME


## Example 8.4, Page number: 266¶

In :
from array import *

# Variable declaration
marks = *10
avg = 0

# Function declaration, calculation and result
def readdata (marks) :
for i in range (0, 10) :
marks[i] = int(raw_input('Enter value in cell [%d] ' % i))

def average (marks) :
mean = 0
for i in range (0, 10) :
mean = mean + marks[i]
return mean/10

def printdata (marks, avg) :
for i in range (0, 10) :
if marks[i] < avg :
print ('Marks in cell [%d] are %d less than average' % (i, marks[i]))
else :
print ('Marks in cell [%d] are %d above/equal to average' % (i, marks[i]))

readdata (marks)
avg = average (marks)
print ('The average marks are %f' % avg)
printdata (marks, avg)

Enter value in cell  45
Enter value in cell  78
Enter value in cell  65
Enter value in cell  43
Enter value in cell  56
Enter value in cell  98
Enter value in cell  53
Enter value in cell  82
Enter value in cell  74
Enter value in cell  39
The average marks are 63.000000
Marks in cell  are 45 less than average
Marks in cell  are 78 above/equal to average
Marks in cell  are 65 above/equal to average
Marks in cell  are 43 less than average
Marks in cell  are 56 less than average
Marks in cell  are 98 above/equal to average
Marks in cell  are 53 less than average
Marks in cell  are 82 above/equal to average
Marks in cell  are 74 above/equal to average
Marks in cell  are 39 less than average


## Example 8.5, Page number: 273¶

In :
from array import *

# Variable declaration
a = [10, 20, 30, 40, 50]

# Function declaration, calculation and result
def fun (x, y, z) :
x = x + 5
y = y + 10
z = z + 100

for i in range (0, 5) :
print ('The cell [%d] contains %d' % (i, a[i]))
print ('The address of cell [%d] is %x' % (i, id(a[i])))

fun (a, a, a)
print

for i in range (0, 5) :
print ('The cell [%d] contains %d' % (i, a[i]))
print ('The address of cell [%d] is %x' % (i, id(a[i])))

The cell  contains 10
The address of cell  is 18bc0c0
The cell  contains 20
The address of cell  is 18bbfd0
The cell  contains 30
The address of cell  is 18bbee0
The cell  contains 40
The address of cell  is 18bc5b8
The cell  contains 50
The address of cell  is 18bc4c8

The cell  contains 10
The address of cell  is 18bc0c0
The cell  contains 20
The address of cell  is 18bbfd0
The cell  contains 30
The address of cell  is 18bbee0
The cell  contains 40
The address of cell  is 18bc5b8
The cell  contains 150
The address of cell  is 18bcaf8


## Example 8.6, Page number: 275¶

In :
from array import *

# Variable declaration
data = raw_input('Enter the string ')

# Function declaration, calculation and result
def revstring (data) :
rev_data = reversed (data)

if list (data) == list (rev_data) :
print ('The string %s is a PALINDROME' % data)
else :
print ('The string %s is not a PALINDROME' % data)

revstring (data)

Enter the string python
The string python is not a PALINDROME


## Example 8.7, Page number: 277¶

In :
from array import *

# Variable declaration
a = *10

# Function declaration, calculation and result
def readnsort (a) :
pos = 0
for len in range (0, 10) :
num = int(raw_input('Enter data element no. %d ' % len))

for pos in range (0, len+1) :
if num < a[pos] :
break

i = len
while i>=pos :
a[i] = a[i-1]
i = i-1
a[pos] = num

def printdata (a) :
for i in range (0, 10) :
print ('The data in cell [%d] is %d ' % (i, a[i]))

readnsort (a)
print
printdata (a)

Enter data element no. 0 45
Enter data element no. 1 78
Enter data element no. 2 65
Enter data element no. 3 43
Enter data element no. 4 56
Enter data element no. 5 98
Enter data element no. 6 53
Enter data element no. 7 82
Enter data element no. 8 74
Enter data element no. 9 39

The data in cell  is 39
The data in cell  is 43
The data in cell  is 45
The data in cell  is 53
The data in cell  is 56
The data in cell  is 65
The data in cell  is 74
The data in cell  is 78
The data in cell  is 82
The data in cell  is 98


## Example 8.8, Page number: 279¶

In :
from array import *

# Function declaration, calculation and result
def readdata () :
a = []
for i in range (0, 10) :
a.append(int(raw_input('Enter data in cell [%d] ' % i)))
return a

def sortdata (a) :
for p in range (0, 9) :
min = p
for i in range (p, 10) :
if a[min] > a[i] :
min = i
temp = a[p]
a[p] = a[min]
a[min] = temp
return a

def printdata (a) :
for i in range (0, 10) :
print ('The data in cell [%d] is %d ' % (i, a[i]))

a = readdata ()
a = sortdata (a)
print ('\nThe sorted data is ')
printdata (a)

Enter data in cell  45
Enter data in cell  78
Enter data in cell  65
Enter data in cell  43
Enter data in cell  56
Enter data in cell  98
Enter data in cell  53
Enter data in cell  82
Enter data in cell  74
Enter data in cell  39

The sorted data is
The data in cell  is 39
The data in cell  is 43
The data in cell  is 45
The data in cell  is 53
The data in cell  is 56
The data in cell  is 65
The data in cell  is 74
The data in cell  is 78
The data in cell  is 82
The data in cell  is 98


## Example 8.9, Page number: 282¶

In :
from array import *

# Function declaration, calculation and result
def readdata () :
a = []
for i in range (0, 10) :
a.append(int(raw_input('Enter data in cell [%d] ' % i)))
return a

def bubble (a) :
for p in range (0, 10) :
for i in range (0, 9-p) :
if a[i] > a[i+1] :
temp = a[i]
a[i] = a[i+1]
a[i+1] = temp
return a

def printdata (a) :
for i in range (0, 10) :
print ('The data in cell [%d] is %d ' % (i, a[i]))

a = readdata ()
a = bubble (a)
print ('\nThe sorted data is ')
printdata (a)

Enter data in cell  45
Enter data in cell  78
Enter data in cell  65
Enter data in cell  43
Enter data in cell  56
Enter data in cell  98
Enter data in cell  53
Enter data in cell  82
Enter data in cell  74
Enter data in cell  39

The sorted data is
The data in cell  is 39
The data in cell  is 43
The data in cell  is 45
The data in cell  is 53
The data in cell  is 56
The data in cell  is 65
The data in cell  is 74
The data in cell  is 78
The data in cell  is 82
The data in cell  is 98


## Example 8.10, Page number: 285¶

In :
from array import *

# Function declaration, calculation and result
def readdata (size) :
a = []
for i in range (0, size) :
a.append(int(raw_input('Enter data in cell [%d] ' % i)))
return a

def bubble (a, size) :
for p in range (0, size) :
for i in range (0, size-p-1) :
if a[i] > a[i+1] :
temp = a[i]
a[i] = a[i+1]
a[i+1] = temp
return a

def printdata (a, size) :
for i in range (0, size) :
print ('The data in cell [%d] is %d ' % (i, a[i]))

def lsearch (a, key, size) :
for i in range (0, size) :
if a[i] == key :
return i
if i == size :
return -1

size = int(raw_input('Enter the total number of elements '))
a = readdata (size)
a = bubble (a, size)
print ('\nThe sorted array is ')
printdata (a, size)

find = int(raw_input('\nEnter the element to be searched '))
pos = lsearch (a, find, size)

if pos<0 :
print ('\nThe element %d NOT FOUND ' % find)
else :
print ('\nThe element %d found at position %d ' % (find, pos))

Enter the total number of elements 5
Enter data in cell  45
Enter data in cell  78
Enter data in cell  65
Enter data in cell  34
Enter data in cell  49

The sorted array is
The data in cell  is 34
The data in cell  is 45
The data in cell  is 49
The data in cell  is 65
The data in cell  is 78

Enter the element to be searched 65

The element 65 found at position 3


## Example 8.11, Page number: 288¶

In :
from array import *

# Function declaration, calculation and result
def readdata (size) :
a = []
for i in range (0, size) :
a.append(int(raw_input('Enter data in cell [%d] ' % i)))
return a

def bubble (a, size) :
for p in range (0, size) :
for i in range (0, size-p-1) :
if a[i] > a[i+1] :
temp = a[i]
a[i] = a[i+1]
a[i+1] = temp
return a

def printdata (a, size) :
for i in range (0, size) :
print ('The data in cell [%d] is %d ' % (i, a[i]))

def bsearch (a, key, size) :
first = 0
last = size - 1
mid = (first + last)/2

while (first <= last and a[mid] != key) :
if a[mid] < key :
first = mid + 1
else :
if a[mid] > key :
last = mid - 1
mid = (first + last)/2

if a[mid] == key :
return mid
else :
return -1

size = int(raw_input('Enter the number of elements in the array '))
a = readdata (size)
a = bubble (a, size)
print ('\nThe sorted array is ')
printdata (a, size)

find = int(raw_input('\nPlease enter the element to be searched for '))
pos = bsearch (a, find, size)

if pos<0 :
print ('\nThe element %d NOT FOUND ' % find)
else :
print ('\nThe element %d found at position %d ' % (find, pos))

Enter the number of elements in the array 5
Enter data in cell  45
Enter data in cell  78
Enter data in cell  65
Enter data in cell  34
Enter data in cell  49

The sorted array is
The data in cell  is 34
The data in cell  is 45
The data in cell  is 49
The data in cell  is 65
The data in cell  is 78

Please enter the element to be searched for 45

The element 45 found at position 1


## Example 8.12, Page number: 293¶

In :
from array import *

# Function declaration, calculation and result
def readncompute (no_of_students) :
a = [[0 for y in xrange(5)] for x in xrange(no_of_students)]
per = [0 for x in range(no_of_students)]
avg = 0

for i in range (0, no_of_students) :
print ('\nEnter marks of 5 subjects for Roll no. %d ' % (i+1))

for j in range (0, 5) :
a[i][j] = int(raw_input('Subject %d = ' % (j+1)))
per[i] = per[i] + a[i][j]

per[i] = per[i]/5
avg = avg + per[i]

return a, avg/no_of_students, per

def printdata (a, no_of_students, avg, per) :
for i in range (0, no_of_students) :
print ('\nMarks for Roll no. %d are ' % (i+1))
for j in range (0, 5) :
print a[i][j]
print ('Percentage for Roll no. %d is %f ' % ((i+1), per[i]))

if per[i] < avg :
print ('Below average')
else :
print ('Above average')

no_of_students = int(raw_input('How many students marks do you want to enter '))
a, average, per = readncompute (no_of_students)
print ('\nThe average marks are %f ' % average)
printdata (a, no_of_students, average, per)

How many students marks do you want to enter 3

Enter marks of 5 subjects for Roll no. 1
Subject 1 = 75
Subject 2 = 43
Subject 3 = 51
Subject 4 = 68
Subject 5 = 73

Enter marks of 5 subjects for Roll no. 2
Subject 1 = 49
Subject 2 = 71
Subject 3 = 62
Subject 4 = 53
Subject 5 = 50

Enter marks of 5 subjects for Roll no. 3
Subject 1 = 90
Subject 2 = 82
Subject 3 = 74
Subject 4 = 93
Subject 5 = 89

The average marks are 68.000000

Marks for Roll no. 1 are
75
43
51
68
73
Percentage for Roll no. 1 is 62.000000
Below average

Marks for Roll no. 2 are
49
71
62
53
50
Percentage for Roll no. 2 is 57.000000
Below average

Marks for Roll no. 3 are
90
82
74
93
89
Percentage for Roll no. 3 is 85.000000
Above average


## Example 8.13, Page number: 296¶

In :
# Function declaration, calculation and result
def getchoice () :
print
print ('1 - Input two matrices ')
print ('2 - Add and display sum ')
print ('3 - Exit ')

choice = int(raw_input('Enter choice : '))
return choice

def read (matrix, rows, cols) :
for i in range (0, rows) :
print ('\nEnter elements for row %d ' % (i+1))
for j in range (0, cols) :
matrix[i][j] = int(raw_input('matrix[%d][%d] = ' % ((i+1),(j+1))))

def add (sum, augend, addend, rows, cols) :
for i in range (0, rows) :
for j in range (0, cols) :
sum[i][j] = augend[i][j] + addend[i][j]

def display2matrices (augend, addend, rows, cols) :
print ('\nMatrix A ')
for i in range (0, rows) :
for j in range (0, cols) :
print ('%3d ' % augend[i][j]),
print
print ('\nMatrix B ')
for i in range (0, rows) :
for j in range (0, cols) :
print ('%3d ' % addend[i][j]),
print

def display3matrices (sum, augend, addend, rows, cols) :
print
for i in range (0, rows) :
for j in range (0, cols) :
print ('%3d ' % augend[i][j]),
print ('%s ' % ('+' if i==rows/2 else ' ')),

for j in range (0, cols) :
print ('%2d ' % addend[i][j]),
print ('%s ' % ('=' if i==rows/2 else ' ')),

for j in range (0, cols) :
print ('%2d ' % sum[i][j]),
print

def display (matrix, rows, cols) :
for i in range (0, rows) :
for j in range (0, cols) :
print ('%3d ' % matrix[i][j]),
print

augend = [[0 for y in xrange(10)] for x in xrange(10)]
addend = [[0 for y in xrange(10)] for x in xrange(10)]
sum = [[0 for y in xrange(10)] for x in xrange(10)]

condition = True
while condition :
choice = getchoice ()

if choice == 1 :
rows = int(raw_input('\nEnter the number of rows '))
cols = int(raw_input('Enter the number of columns '))

print ('\n\nEnter the first matrix ')
read (augend, rows, cols)
print ('\n\nEnter the second matrix ')
read (addend, rows, cols)
print ('\n\nYou entered ')
display2matrices (augend, addend, rows, cols)

elif choice == 2 :
add (sum, augend, addend, rows, cols)
display3matrices (sum, augend, addend, rows, cols)

elif choice == 3 :
condition = False
exit ()

1 - Input two matrices
2 - Add and display sum
3 - Exit
Enter choice : 1

Enter the number of rows 3
Enter the number of columns 3

Enter the first matrix

Enter elements for row 1
matrix = 1
matrix = 2
matrix = 3

Enter elements for row 2
matrix = 3
matrix = 4
matrix = 5

Enter elements for row 3
matrix = 5
matrix = 6
matrix = 7

Enter the second matrix

Enter elements for row 1
matrix = 3
matrix = 5
matrix = 1

Enter elements for row 2
matrix = 6
matrix = 5
matrix = 3

Enter elements for row 3
matrix = 8
matrix = 7
matrix = 4

You entered

Matrix A
1    2    3
3    4    5
5    6    7

Matrix B
3    5    1
6    5    3
8    7    4

1 - Input two matrices
2 - Add and display sum
3 - Exit
Enter choice : 2

1    2    3      3   5   1      4   7   4
3    4    5  +   6   5   3  =   9   9   8
5    6    7      8   7   4     13  13  11

1 - Input two matrices
2 - Add and display sum
3 - Exit
Enter choice : 3


## Example 8.14, Page number: 300¶

In :
# Function declaration, calculation and result
def readmatrix (matrix, rows, cols) :
for i in range (0, rows) :
print ('\nPlease enter elements for row %d ' % (i+1))
for j in range (0, cols) :
matrix[i][j] = int(raw_input('matrix[%d][%d] = ' % ((i+1),(j+1))))

def multiply (prod, a, b, Ar, Ac, Bc) :
for i in range (0, Ar) :
for j in range (0, Bc) :
prod[i][j] = 0
for k in range (0, Ac) :
prod[i][j] += a[i][k] * b[k][j]

def display (matrix, rows, cols) :
for i in range (0, rows) :
for j in range (0, cols) :
print ('%3d ' % matrix[i][j]),
print

a = [[0 for y in xrange(10)] for x in xrange(10)]
b = [[0 for y in xrange(10)] for x in xrange(10)]
product = [[0 for y in xrange(10)] for x in xrange(10)]

condition = True
while condition  :
Arows, Acols = map(int, raw_input('Enter order of matrix A: ').split())
Brows, Bcols = map(int, raw_input('Enter order of matrix B: ').split())

if Acols == Brows :
condition = False
break
else :
print ('\nMatrices are not compatible for multiplication. Enter the order again. ')
continue

print ('\nEnter matrix A: ')
readmatrix (a, Arows, Acols)

print ('\nEnter matrix B: ')
readmatrix (b, Brows, Bcols)

multiply (product, a, b, Arows, Acols, Bcols)
print ('\nThe resultant product (A.B) is: ')
display (product, Arows, Bcols)

Enter order of matrix A: 2 3
Enter order of matrix B: 3 2

Enter matrix A:

Please enter elements for row 1
matrix = 1
matrix = 2
matrix = 3

Please enter elements for row 2
matrix = 4
matrix = 5
matrix = 6

Enter matrix B:

Please enter elements for row 1
matrix = 6
matrix = 5

Please enter elements for row 2
matrix = 4
matrix = 3

Please enter elements for row 3
matrix = 2
matrix = 1

The resultant product (A.B) is:
20   14
56   41


## Example 8.15, Page number: 303¶

In :
# Function declaration, calculation and result
def getchoice () :
print
print ('1 - Input square matrix ')
print ('2 - Display upper triangular matrix ')
print ('3 - Display lower triangular matrix ')
print ('4 - Exit ')

condition = True
while condition :
choice = int(raw_input('Enter choice : '))

if choice in range (1, 5) :
condition = False

return choice

def displayupper (matrix, order) :
print
for i in range (0, order) :
for j in range (0, order) :
if j >= i :
print ('%3d ' % matrix[i][j]),
else :
print ('%3d ' % 0),
print

def displaylower (matrix, order) :
print
for i in range (0, order) :
for j in range (0, order) :
if j <= i :
print ('%3d ' % matrix[i][j]),
else :
print ('%3d ' % 0),
print

def read (matrix, rows, cols) :
for i in range (0, rows) :
print ('\nEnter %d elements for row %d ' % (rows, (i+1)))
for j in range (0, cols) :
matrix[i][j] = int(raw_input('matrix[%d][%d] = ' % ((i+1),(j+1))))

matrix = [[0 for y in xrange(10)] for x in xrange(10)]

condition = True
while condition :
choice = getchoice ()

if choice == 1 :
order = int(raw_input('\nEnter order of square matrix '))
read (matrix, order, order)

elif choice == 2 :
displayupper (matrix, order)

elif choice == 3 :
displaylower (matrix, order)

elif choice == 4 :
condition = False
exit ()

1 - Input square matrix
2 - Display upper triangular matrix
3 - Display lower triangular matrix
4 - Exit
Enter choice : 1

Enter order of square matrix 3

Enter 3 elements for row 1
matrix = 1
matrix = 2
matrix = 3

Enter 3 elements for row 2
matrix = 4
matrix = 5
matrix = 6

Enter 3 elements for row 3
matrix = 7
matrix = 8
matrix = 9

1 - Input square matrix
2 - Display upper triangular matrix
3 - Display lower triangular matrix
4 - Exit
Enter choice : 2

1    2    3
0    5    6
0    0    9

1 - Input square matrix
2 - Display upper triangular matrix
3 - Display lower triangular matrix
4 - Exit
Enter choice : 3

1    0    0
4    5    0
7    8    9

1 - Input square matrix
2 - Display upper triangular matrix
3 - Display lower triangular matrix
4 - Exit
Enter choice : 4


## Example 8.16, Page number: 307¶

In :
# Function declaration, calculation and result
def readmatrix (matrix, n) :
for i in range (0, n) :
print ('\nEnter elements for row no %d ' % (i+1))
for j in range (0, n) :
matrix[i][j] = int(raw_input('matrix[%d][%d] = ' % ((i+1),(j+1))))

def display (matrix, n) :
print
for i in range (0, n) :
for j in range (0, n) :
print ('%5d ' % matrix[i][j]),
print

def isunitmatrix(matrix, n) :
for i in range (0, n) :
if matrix[i][i] != 1 :
return 0

for i in range (0, n) :
for j in range (0, n) :
if i != j :
if matrix[i][j] != 0 :
return 0
return 1

matrix = [[0 for y in xrange(10)] for x in xrange(10)]
n = int(raw_input('Enter order of matrix '))
readmatrix (matrix, n)
display (matrix, n)

if (isunitmatrix (matrix, n)) :
print "UNIT MATRIX"
else :
print "NOT A UNIT MATRIX"

Enter order of matrix 3

Enter elements for row no 1
matrix = 1
matrix = 0
matrix = 0

Enter elements for row no 2
matrix = 0
matrix = 1
matrix = 0

Enter elements for row no 3
matrix = 0
matrix = 0
matrix = 1

1      0      0
0      1      0
0      0      1
UNIT MATRIX


## Example 8.17, Page number: 311¶

In :
# Variable declaration
string = raw_input('Enter a string: ')

# Calculation and result
swap_string = string.swapcase()

print swap_string

Enter a string: hello world
HELLO WORLD


## Example 8.18, Page number: 312¶

In :
# Variable declaration
string = raw_input('Enter a string ')

# Function declaration, calculation and result
def printstr (string) :
for i in range (0, len(string)) :
for j in range (0, i+1) :
print string[j],
print

i = i - 2
while i >= 0 :
for j in range (0, i+1) :
print string[j],
print
i = i - 1

printstr (string)

Enter a string hello
h
h e
h e l
h e l l
h e l l o
h e l
h e
h


## Example 8.19, Page number: 314¶

In :
# Variable declaration
a = raw_input('Enter any string ')

# Function declaration, calculation and result
def copy (a) :
b = a
return b

b = copy (a)
print
print ('The first string is %s ' % a)
print ('The second string is %s ' % b)

Enter any string hello

The first string is hello
The second string is hello


## Example 8.20, Page number: 315¶

In :
# Variable declaration
a = raw_input('Enter the major string: ')
b = raw_input('Enter the minor string: ')

# Function declaration, calculation and result
def ispart (a, b) :
if b in a :
print ('The string "%s" is A SUBSTRING of "%s" ' % (b, a))
else :
print ('The string "%s" is NOT A SUBSTRING of "%s" ' % (b, a))

ispart (a, b)

Enter the major string: python is a programming language
Enter the minor string: python
The string "python" is A SUBSTRING of "python is a programming language"