+++
title = "Listes"
weight = 1
+++

# Listes

// TODO: split in pages

## Définition

Une liste est une _suite ordonée_ d'éléments.

## Créer une liste

Avec `[]`, et les élements séparés par des virgules:

```python
liste_vide = []
trois_entiers = [1, 2, 3]
```


## Listes hétérogènes

On peut mettre des types différents dans la même liste

```python
ma_liste = [True, 2, "trois"]
```

On peut aussi mettre des listes dans des listes:

```python
liste_de_listes = [[1, 2], ["Germaine", "Gertrude"]]
```

## Connaître la taille d'une liste

Avec `len()` - encore une fonction native

```python
>>> liste_vide = []
>>> len(liste_vide)
0
>>> trois_entiers = [1, 2, 3]
>>> len(trois_entiers)
3
```

## Concaténation de listes

Avec `+`

```python
>>> prénoms = ["Alice", "Bob"]
>>> prénoms += ["Charlie", "Eve"]
>>> prénoms
['Alice', 'Bob', "Charlie", 'Eve']
```

On ne peut concaténer des listes que avec d'autres listes:

```python
>>> scores = [1, 2, 3]
>>> scores += 4  # TypeError
>>> scores += [4]  # OK
```

## Test d'appartenance

Avec `in`:

```python
>>> prénoms = ["Alice", "Bob"]
>>> "Alice" in prénoms
True
```

```python
>>> prénoms = ["Alice", "Bob"]
>>> "Charlie" in prénoms
False
```

## Itérer sur les élements d'une liste

Avec `for ... in`

```python
prénoms = ["Alice", "Bob", "Charlie"]
for prénom in prénoms:
	# La variable 'prénom" est assignée à chaque
	# élément de la liste
    print("Bonjour", prénom)

Bonjour Alice
Bonjour Bob
Bonjour Charlie
```

## Indéxer une liste

* Avec `[]` et un entier

* Les index valides vont de 0 à `n-1` où `n` est la
taille de la liste.

```python
>>> fruits = ["pomme", "orange", "poire"]
>>> fruits[0]
"pomme"
>>> fruits[1]
"orange"
>>> list[2]
"poire"
>>> fruits[3] # IndexError
```

## Modifier une liste

Encore une assignation:

```python
>>> fruits = ["pomme", "orange", "poire"]
>>> fruits[0] = "abricot"
>>> fruits
["abricot", "orange", "poire"]
```

## Les strings sont aussi des listes (presque)

On peut itérer sur les caractères d'une string:

```python
for c in "vache":
	print(c)
v
a
c
h
e
```

On peut tester si un caractère est présent:

```python
>>> "e" in "vache"
True
>>> "x" in "vache"
False
```


Mais on neut peut pas modifier une string

```python
>>> prénom = "Charlotte"
>>> prénom[0]
"C"
>>> prénom[3]
"r"
>>> prénom[0] = "X" # TypeError
```
