colors = ['red', 'blue', 'green']
for color in colors:
print(color)
For with else
colors = None
for color in colors:
print(color)
else:
print("no colors found")
Iterating multiple sequences with zip()
def using_zip_demo():
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
fruits = ["Apple", "Orange", "Banana", "Watermelon", "Pomegranate", "blueberry", "grapes"]
drinks = ["coffee", "tea", "beer", "whiskey", "wine", "rum", "vodka"]
count = len(days)
index = 0
for day, fruit, drink in zip(days, fruits, drinks):
print(f"{day=} \n diet plan \n fruit = {fruit=} \n {drink=}")
Using zip to create lists
Lists can be created in numeric ways
Out of all of the approaches mentioned above each approach is value and will produce same result. However the more Pythonic way to build a list is
[expression for item in iterable ]
Example
number_list = [ number for number in range(1,5) ]
square_list = [ number*number for number in range(1,5) ]
Lets make this more interesting we can add conditions
[expression for item in iterable if condition ]
lets create a list of even number from 1 to 1000
To achieve the same stuff as shown in the above image, the traditional code
a_list = []
for number in range(1, 11):
if number%2 == 0:
a_list.append(number)
Lets iterate through rows and columns in a 3*3 matrix
def print_matrix_traditional():
"""
This method will demonstrate creating a matrix
"""
for row in range(1, 4):
for col in range(1, 4):
print(row, col)
def print_matrix_pythonic():
"""
This method prints the matrix in a pythonic fashion
:return:
"""
rows = range(1, 4)
cols = range(1, 4)
cells = [(row, col) for row in rows for col in cols]
for cell in cells:
print(cell)
Tuples vs Lists
Tuples use less space.
Tuples can be used as dictionary keys
Named Tuples can be a simple alternative to objects
If your collection is static use tuple and if collection is dynamic use lists
Copy with copy(), list() and slicing
You can copy values of list to an fresh list by using
the list copy() method
The list() conversion function
The list slice [:]
Now lets experiment
Changing a value of a does not effect copies b,c and d
In lists when we copy elements of list to other list. There are two kinds of copies
deep copy
shallow copy: when we changed the value of list in a list all the copy methods values were changed, this is called as shallow
Importance of Python Data Model
Simple Card deck
import collections
Card = collections.namedtuple('Card', ['rank', 'suit'])
class CardDeck:
ranks = [str(n) for n in range(2, 11)] + list('JQKA')
suits = 'spades diamonds clubs hearts'.split()
def __init__(self):
self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks]
def __len__(self):
return len(self._cards)
def __getitem__(self, position):
return self._cards[position]
Vector
import math
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f'Vector({self.x!r}, {self.y!r})'
def __abs__(self):
return math.hypot(self.x, self.y)
def __bool__(self):
return bool(abs(self))
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x,y)
def __mul__(self, other):
return Vector(self.x*other, self.y*other)