Lecture 5

lists

MCS 260 Fall 2021
David Dumas

Reminders

  • No class on Monday (Labor day)
  • Homework 2 will be posted Thursday and due next Wednesday at 10am (24 hours later than usual due to holiday).

Lists

A list is an object in Python that stores a sequence of values (of any type).

They are written in Python as comma-separated lists surrounded by square brackets.


>>> L = [4, "red", 2.2, [5,6]]  # Square bracket = list
>>> L
[4, 'red', 2.2, [5, 6]]
>>> type(L)
<class 'list'>
If L is a list, len(L) gives the number of elements.

>>> len(L)
4

The empty list exists and is written $\texttt{[]}$.

$\texttt{list + list}$ will join lists.


        >>> [1,2,3] + [4,5,6]
        [1, 2, 3, 4, 5, 6]
        

$\texttt{list * n} $ is equivalent to $\texttt{list + list + ... + list}$ (n times).


        >>> [1,99]*3
        [1, 99, 1, 99, 1, 99]
        

Indexing

Items can be retrieved by $0$-based index (position):

>>> L = [4,8,15,16,23,42]
>>> L[2]
15
>>> L[0]
4
>>> L[4]
23

Mutability

Lists are mutable, meaning that the contents can be changed.

>>> L = [4,8,15,16,23,42]
>>> L[2] = 999
>>> L
[4, 8, 999, 16, 23, 42]
An element of a list can be deleted with the del keyword. Elements to the right move over.

>>> L = [4,8,15,16,23,42]
>>> del L[2]
>>> L
[4, 8, 16, 23, 42]
You can't access or assign list indices that don't exist:

>>> L = [4,8,15,16,23,42]
>>> L[6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> L[6] = 121
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
You can add a new element to a list as follows:

>>> L.append(121)
>>> L
[4, 8, 15, 16, 23, 42, 121]

Sequences

Lists are examples of Python sequences: ordered collections of elements that can be retrieved by index.

Strings are sequences, too. Indexing them retrieves a single character.


>>> "asdf"[2]     # string indexing
'd'

len(string) gives the number of characters.

Negative indices

Sequences allow negative indices, where -1 refers to the last element, -2 to the second to last, etc.


>>> [2,6,0,2,0,2,1][-1]
1
>>> "Oklahoma!"[-3]
'm'

In many cases, negative indices allow you to avoid using len(...).

Slices

Slices are a way to retrieve part of a sequence, e.g. a contiguous segment. The syntax

\[ \texttt{x[i:j]} \] retrieves elements of $\texttt{x}$ with $0$-based indices between $\texttt{i}$ and $\texttt{j}$, including $\texttt{i}$ but not including $\texttt{j}$.

Either $\texttt{i}$ or $\texttt{j}$ can be omitted; missing $\texttt{i}$ is taken to be $0$, missing $\texttt{j}$ is taken to be just past the end.


>>> s = "learning Python"
>>> s[1:4]
'ear'
>>> s[:5]
'learn'
>>> s[5:]
'ing Python'
>>> s[:-1]
'learning Pytho'
>>> s[:]
'learning Python'
l e a r n i n g P y t h o n
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Membership testing

Python's in keyword is an operator that tests whether a value is one of the elements of a list.


        >>> 5 in [2,3,0,2,2]
        False
        >>> 2 in [2,3,0,2,2]
        True
        >>> [1,2] in [[4,5,8],[1,2],[1,2,3]]
        True
        >>> 2 in [[4,5,8],[1,2],[1,2,3]]
        False
    

For testing non-membership you can use

x not in L  # Equivalent to:  not (x in L)

in operator for strings

When used with strings, the in operator checks whether one string appears inside another:

    >>> "e" in "team"
    True
    >>> "i" in "team"
    False
    >>> "car" in "vicarious"
    True
    >>> "rat" in "perambulate"
    False

Sequence conversion

The function $\texttt{list()}$ will convert another sequence to a list.


>>> list("abc")
['a', 'b', 'c']

Careful: $\texttt{str()}$ exists but doesn't convert a sequence to a string in the corresponding way.

References

  • In Downey:
    • Lists are covered in Chapter 10 (includes more material than in today's lecture)

Revision history

  • 2021-08-31 Initial publication