Python Basics

Content

  • Lists
  • Dictionaries
  • Sets
  • Control Flow (if, for, while)

Lists

(see https://docs.python.org/2/tutorial/introduction.html#lists)

Lists are a very common concept in Python. Objects can be lists of the aforementioned data types:


In [1]:
l1 = [1, 2, 3, 4, 5, 6]     # list of the same data type
l2 = [1, 2.3, 'a']          # list of different data types
l3 = [[1, 2, 3], [4, 5, 6]] # a nested (multidimensional) list
l4 = range(3,10)            # a neat way to generate a list of integers

Simple list operations:


In [2]:
print len(l1)        # number of items in the list

print l1[0]          # access individual items in the list (square brackets!)
l1[0] = 99           # assign a new value to an item
print l1[0]          # the value has changed

print l1+[6, 7]      # concatenate lists

l1.append(11)        # append an item to a list
print len(l1)        # the list is longer now


6
1
99
[99, 2, 3, 4, 5, 6, 6, 7]
7

Slicing allows to address certain parts of lists.

Important: Python list indices always start at 0 (zero).


In [3]:
print l1[:]      # the whole list
print l1[0:3]    # the first 3 items, indices: 0, 1, 2; but not 3
print l1[6:8]    # 2 items, indices: 6, 7
print l1[-1]     # the last item
print l1[-2]     # the second to last item
print l1[::2]    # every second item from the whole list
print l1[::-1]   # reverse list


[99, 2, 3, 4, 5, 6, 11]
[99, 2, 3]
[11]
11
6
[99, 3, 5, 11]
[11, 6, 5, 4, 3, 2, 99]

More advanced list operations:


In [4]:
print len(l1)
print l1.pop(0) # remove item from list and return its value
print len(l1)

print l1
l1.insert(4,20) # insert element (here: 20) before index (here: 4)
print l1

print min(l1)   # minimum value
print max(l1)   # maximum value

print sorted(l1, reverse=True)     # sort list (in descending order)

print map(lambda x: x*x, l1)       # map list on a lambda function (more on lambda function later) 

print filter(lambda x: x < 5, l1)  # filter list using lambda function


7
99
6
[2, 3, 4, 5, 6, 11]
[2, 3, 4, 5, 20, 6, 11]
2
20
[20, 11, 6, 5, 4, 3, 2]
[4, 9, 16, 25, 400, 36, 121]
[2, 3, 4]

side note: Tuples are similar to lists, but are immutable. Tuples use parantheses instead of square brackets and are often used for function output.


In [5]:
t = (1, 2)
#t[0] = 3   # results in a TypeError

more side notes: string are lists, too.


In [6]:
s = 'abcdefghijklmnopqrstuvwxyz'
print len(s)
print s[10:]


26
klmnopqrstuvwxyz

Dictionaries

(see https://docs.python.org/2/tutorial/datastructures.html?highlight=dictionary#dictionaries)

Dictionaries can be used for look-up tables. They are useful to make associations between different variables.


In [7]:
weather = {'winter': 'cold', 'spring': 'windy', 'summer':'warm', 'fall': 'cold again'}  # mind the curly brackets
season = 'winter'
print season, 'in Flagstaff is', weather[season]


winter in Flagstaff is cold

Each element of a dictionary consists of a key and a value ('winter' is a key, 'cold' is the corresponding value). Lists of keys and values can be obtained as:


In [8]:
print weather.keys()    # obtain all keys
print weather.values()  # obtain all values


['spring', 'fall', 'winter', 'summer']
['windy', 'cold again', 'cold', 'warm']

Keys and values don't have to have the same datatype:


In [9]:
wordifier = {1: 'one', 2: 'two', 3: 'three'}
print wordifier[2]


two

Dictionaries can be extended, but note that every key can only appear once in each dictionary:


In [10]:
weather['Thanksgiving'] = 'nice'
print weather['Thanksgiving']
weather['Thanksgiving'] = 'amazing'
print weather['Thanksgiving']


nice
amazing

Dictionaries have a length like lists, but they are not necessarily sorted in any way:


In [11]:
print len(weather)
print weather


5
{'spring': 'windy', 'fall': 'cold again', 'winter': 'cold', 'Thanksgiving': 'amazing', 'summer': 'warm'}

Sets

(see https://docs.python.org/2/tutorial/datastructures.html?highlight=dictionary#sets)

Sets are dictionaries with keys, only. They are useful to list unique elements. Similar to dictionaries, sets are not sorted.


In [12]:
basket = set(['bread', 'eggs', 'butter', 'milk', 'bread']) # note that sets are generated from lists
print basket


set(['butter', 'eggs', 'milk', 'bread'])

It is possible to check if a certain element exists in a set (note the intuitive syntax).


In [13]:
print 'eggs' in basket
print 'cake' in basket


True
False

Control Flow

(see https://docs.python.org/2/tutorial/controlflow.html)

IF Statement

checks if a condition is met (or not)


In [14]:
shoppinglist = set(['bread', 'eggs', 'butter', 'milk', 'bread'])
item = 'milk'
if item in shoppinglist:
    print 'buy', item
elif item == 'anchovis':
    print 'we will never buy anchovis again!'
else:
    print 'we still have', item


buy milk

Note the indentation: everything inside the if statement must be indented by the same number of blanks.

The general syntax is if <condition>, where <condition> has to be either True or False. Examples for conditions are:


In [15]:
x = 1
print x < 5
print x > 6
print x is not 2  # another example of Python's intuitive syntax
print x is 2
print x < 5 and x > 2
print (x-3) > 1 or (x/2.) > 0


True
False
True
False
False
True

If statements can be put into single lines:


In [16]:
print 'x greater 5' if x > 5 else 'x <= 5' # print uses either string


x <= 5

FOR Loop

Some examples:


In [17]:
for item in ['a', 'b', 'c', 'd']:  # take each element from list
    print item


a
b
c
d

In [18]:
for n in range(10):  # range generates a list of numbers starting with 0
    print n


0
1
2
3
4
5
6
7
8
9

In [19]:
for idx, item in enumerate(['a', 'b', 'c', 'd']): # obtain list index and item at the same time
    print idx, item


0 a
1 b
2 c
3 d

In [20]:
for item in ['a', 'b', 'c', 'd']:
    if item == 'b':
        continue    # continue allows to escape current loop item and resume with next one
    if item == 'd':
        break       # break stops the for-loop immediately ('d' gets not printed)
    print item


a
c

A single-line version of the for loop can be used to generate new lists from already existing lists (this is called list comprehension):


In [21]:
[x**2+3*x+1 for x in range(5)]


Out[21]:
[1, 5, 11, 19, 29]

Advice: if you are looping through a list, you shouldn't alter this list within the loop. It will most likely mess up things:

WHILE Loop

While loops are similar to for loops but are more useful if the number of iterations is not yet known. This is a bad example that should have been done using a for loop:


In [22]:
i = 0
while i < 10:
    print i
    i += 1


0
1
2
3
4
5
6
7
8
9

This is a good example of how to use a while loop:


In [23]:
i = 0
stop = 7
while True:
    print i
    i += 1
    if i >= stop:
        print "I'll stop here"
        break   # break also works in while-loops


0
1
2
3
4
5
6
I'll stop here