Python Lab 4: Data Structures in Python
Data structures are a way of organizing and storing data so that they can be accessed and worked with efficiently. They define the relationship between the data, and the operations that can be performed on the data. Data structures unlike data types not only store a value but collection of values in various format.
List
- A list is a data structure that holds an ordered collection of items i.e. you can store a
- sequence of items in a list.
- The items of list should be enclosed in square brackets
- Lists are mutable that means you can add, remove or delete items in list
List Functions
x=\[1,2,3,4,5,6,7\]
print(type(x))
Show Output
<class 'list'>
insert() function is used to insert an element in the list at the specified index
x.insert(2,10)
Show Output
print(x)
[1, 2, 10, 3, 4, 5, 6, 7]
append() functions is used to add an element to the end of a list.
x.append(20)
Show Output
print(x)
[1, 2, 10, 3, 4, 5, 6, 7, 20]
len() function returns the length of a list which will be the total number of elements present in the list
len(x)
Show Output
print(len(x))
9
remove() function is used to remove a specific element from the list
x.remove(7)
Show Output
print(x)
[1, 2, 10, 3, 4, 5, 6, 20]
pop() function removes and returns the last element from the list
x.pop()
show output
print(x)
[1, 2, 10, 3, 4, 5, 6]
del is also used to delete an element from the list , it deletes the element specified at the index
del x\[4\]
Show Output
print(x)
[1, 2, 10, 3, 5, 6]
extend() function in list is used to extend one list with another
x=\['cisco','juniper','hp'\]
y=\['router','switch','firewall'\]
x.extend(y)
Show Ouput
print(x)
['cisco', 'juniper', 'hp', 'router', 'switch', 'firewall']
Sort() function sorts the list in ascending order.Sorting is done on the basis of ASCII values. You can also decide the sorting order by setting the reverse parameter to either true or false
x = \['cisco', 'HP', 'juniper', 'router', '7200'\]
x.sort()
Show Output
print(x)
['7200', 'HP', 'cisco', 'juniper', 'router']
Below example shows sort() function with reverse parameter = True
x = \['cisco', 'HP', 'juniper', 'router', '7200'\]
x.sort(reverse=True)
Show Output
print(x)
['router', 'juniper', 'cisco', 'HP', '7200']
sorted() function in list is used to sort the list in ascending order.The only difference between the sort() function and the sorted function is that the sort() function will modify the list it is called on. The sorted() function will create a new list containing a sorted version of the list it is given.
x = \['cisco', 'HP', 'juniper', 'router', '7200'\]
Show Output
print(sorted(x))
['7200', 'HP', 'cisco', 'juniper', 'router']
print(x)
['cisco', 'HP', 'juniper', 'router', '7200']
The max() function returns the item with the highest value .this is done with help of ASCII values, ASCII values of small letter is the highest and lowest for numbers
x=\['INR','12','456','dollar'\]
Show Output
print(max(x))
dollar
The min() function returns the item with the lowest value
Show Output
print(min(x))
12
Slicing in List
Slicing in list works in same way as it does in strings(We have already studied string slicing in LAB 2: Basics of Programming)
x = \['pune','mumbai','nagpur','nasik','kolhapur'\]
print(x\[3\])
Show Output
'nasik'
print(x\[1:4\])
Show Ouput
['mumbai', 'nagpur', 'nasik']
print(x\[0:5:2\])
Show Output
['pune', 'nagpur', 'kolhapur']
print(x\[-1:-4:-1\])
Show Output
['kolhapur', 'nasik', 'nagpur']
Nested List
Nested list is a list with in another list.Below example shows nested list
city = \['pune','mumbai','nagpur','nasik','kolhapur'\]
state = \['Maharashtra','Gujarat','kerala',city\]
country = \['india','singapore','malaysia','sri lanka',state\]
Show Output
print(country)
['india', 'singapore', 'malaysia', 'sri lanka', ['Maharashtra', 'Gujarat', 'kerala', ['pune', 'mumbai', 'nagpur', 'nasik', 'kolhapur']]]
Accessing items within nested list.Here we are trying to access the element ‘kolhapur’
print(country\[4\]\[3\]\[4\])
Show Output
'kolhapur'
In this example we are trying to access element ‘kerala’
print(country\[4\]\[2\])
Show Output
'kerala'
List Comprehension
List Comprehension is an elegant and easy way to define and create lists.
Creating a list using for loop
squares=\[\]
for n in range(10):
squares.append(n\*\*2)
print(squares)
Show Output
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Implementing the same using list comprehension
squares = \[n\*\*2 for n in range(10)\]
print(squares)
Show Output
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Example : This example sorts the odd and even numbers from a list and save them in new list
x=\[12,23,45,67,87,2\]
list\_even=\[\]
list\_odd=\[\]
for i in x:
if i%2==0:
list\_even.append(i)
else:
list\_odd.append(i)
print('List\_even',list\_even)
print('List\_odd',list\_odd)
Show Output
List_even [12, 2]
List_odd [23, 45, 67, 87]
Implementing the same using List comprehension
x=\[12,23,45,67,87,2\]
list\_even=\[i for i in x if i%2==0\]
print('List\_even',list\_even)
list\_odd=\[i for i in x if i%2!=0\]
print('List\_odd',list\_odd)
Show Output
List_even [12, 2]
List_odd [23, 45, 67, 87]
Tuples in Python
- Tuples are used to hold together multiple objects in ordered sequence
- Tuples are immutable like strings i.e. you cannot modify tuples.
- Tuples are defined by specifying items separated by commas within a pair of parentheses.
- Tuples are usually used in cases where the values or elements of tuples will not change
Since tuples are immutable there are no functions available to add or remove elements from tuples.You can still access elements from tuples using indexing as we did in list.
x=('sam','rahul','sameer','divya')
print(x\[3\])
Show Output
divya
To add elements in tuples we have to convert it into list and then use list functions to add or remove elements and then convert the list back to tuple
tup = (1,2,'jacky','nilam',4,5)
y = list(tup)
print(type(y))
y.append('Priya')
tup=tuple(y)
print(type(tup))
print('new tuple',tup)
Show Output
<class 'list'>
<class 'tuple'>
new tuple (1, 2, 'jacky', 'nilam', 4, 5, 'Priya')
Why to use tuples ?
- Tuples are lighter-weight and are more memory efficient and often faster if used in appropriate places.
- When using a tuple, you protect against accidental modification when passing it between functions.
- Tuples, being immutable, can be used as a key in a dictionary, which we’re about to learn about.
Dictionary in Python
- A dictionary is like an address-book where you can find the address or contact details of a person by knowing only his/her name i.e. we associate keys (name) with values (details).
- Keys in dictionary should always be immutable object (like strings) but the Values of dictionary can be mutable.
- The elements/items in dictionary are enclosed within curly brackets
dc = {'vendor':'cisco','device':'router','ios':15.4}
print(type(dc))
Show Output
<class 'dict'>
keys() function returns a list of all keys in the dictionary
print(dc.keys())
Show Output
dict_keys(['vendor', 'device', 'ios'])
values() function returns a list of all values in the dictionary
print(dc.values())
Show Output
dict_values(['cisco', 'router', 15.4])
items() function returns a list of all key : value pair in the dictionary
print(dc.items())
Show Output
dict_items([('vendor', 'cisco'), ('device', 'router'), ('ios', 15.4)])
To add new item ( key : value ) in a dictionary
dc\['series'\] = 7200
Show Output
print(dc)
{'vendor': 'cisco', 'device': 'router', 'ios': 15.4, 'series': 7200}
To change value of existing key in a dictionary
dc\['vendor'\] = 'juniper'
Show Output
print(dc)
{'vendor': 'juniper', 'device': 'router', 'ios': 15.4, 'series': 7200}
Accessing values of any particular key in a dictionary
dc\['device'\]
Show Output
router
pop() method removes an element from the dictionary. It removes the element which is associated to the specified key. If specified key is present in the dictionary, it remove and return its value.
dc.pop('ios')
Show Output
15.4
print(dc)
{'vendor': 'juniper', 'device': 'router', 'series': 7200}
The popitem() method removes the item that was last inserted into the dictionary and returns it.
dc.popitem()
Show Output
('series', 7200)
Nested Dictionary
dc = {'fruit':'apple','vegtable':'potato','junk':{'drinks':'coke','burger':'Mc D','pizza':'dominos'}}
Accessing items in nested dictionary
dc\['junk'\]\['pizza'\]
Show Output
'dominos'
Changing values of a particular key in nested dictionary
dc\['junk'\]\['pizza'\]='pizza hut'
Show Output
print(dc)
{'fruit': 'apple', 'vegtable': 'potato', 'junk': {'drinks': 'coke', 'burger': 'Mc D', 'pizza': 'pizza hut'}}
deleting item from nested dictionary
del dc\['junk'\]\['pizza'\]
Show Output
print(dc)
{'fruit': 'apple', 'vegtable': 'potato', 'junk': {'drinks': 'coke', 'burger': 'Mc D'}}
Dictionary Comprehension
Dictionary comprehension is simplest and elegant way of creating dictionary
my\_dic={}
for i in range (5):
for j in range(5):
my\_dic\[i\]=j
print(my\_dic)
Show Output
{0: 4, 1: 4, 2: 4, 3: 4, 4: 4}
Implementing the same using dictionary comprehension
mu\_dic={i:j for i in range(5) for j in range(5)}
Show Output
{0: 4, 1: 4, 2: 4, 3: 4, 4: 4}
names = \['tony','captain','batman'\]
heros = \['stark','america','bruce'\]
dic={}
for names,heros in zip(names,heros):
dic\[names\]=heros
print(dic)
Show Output
{'tony': 'stark', 'captain': 'america', 'batman': 'bruce'}
Implementing the same using dictionary comprehension
names = \['tony','captain','batman'\]
heros = \['stark','america','bruce'\]
my\_dict={name:hero for name,hero in zip(names,heros)}
print(my\_dict)
Show Output
{'tony': 'stark', 'captain': 'america', 'batman': 'bruce'}
Sets in Python
- Sets are unordered collections of simple objects. These are used when the existence of any object in a collection is more important than the order or how many times it occurs.
- Sets are Mutable data types
Similar items are counted only nce in set
set1 = {'c','c++','java','python','python','java'}
print(set1)
Show Output
{'c', 'c++', 'python', 'java'}
Since sets are unordered collection of data we cannot perform indexing operation on sets
Below syntax show how to add element into a set, this items will get added randomly anywhere in the set.
set1.add('ansible')
print(set1)
Show Output
{'python', 'ansible', 'c', 'c++', 'java'}
Below syntax shows how to delete an item from set
set1.remove('c++')
print(set1)
Show Output
{'python', 'ansible', 'c', 'java'}
pop() function removes and returns any arbitrary element from the set
set1.pop()
print(set1)
Show Output
'python'
{'ansible', 'c', 'java'}
discard() method is also used to remove an element from the set the only difference between discard() and remove() is that remove() returns an error if the item to be deleted is not present in the set where as discard() function doesn’t show any error
set.discard('php')
clear() is used to clear the entire set
set1.clear()
Show Output
print(set1)
set()
intrsection() method returns a set that contains the similarity between two or more sets.
setA = {1,2,6,8,10,15,20}
setB = {2,6,12,15,16}
print(setA.intersection(setB))
Show Output
{2, 6, 15}
difference() returns the difference between two given sets.
print(setA.difference(setB))
Show Output
{8, 1, 10, 20}
The union() method returns a set that contains all items from the original set, and all items from the specified sets
print(setA.union(setB))
Show Output
{1, 2, 6, 8, 10, 12, 15, 16, 20}
The issubset() method returns True if all elements of a set A are present in another set B which is passed as an argument and returns false if all elements not present.
setC = {1,2,6,8}
print(setC.issubset(setA))
Show Output
True
The issuperset() method returns True if all elements of a set A occupies set B which is passed as an argument and returns false if all elements of B not present in A.
print(setA.issuperset(setC))
Show Output
True