Cours 3 Travailler avec des listes et des fonctions

Traitement de l’information

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
  ['FLE', 'Clémence Flémal'],
]

Transformation

# Transforme une liste de profs
profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]
# En une liste de trigrammes
trigrams = [
  'LUR'
  'LRG',
  'FKY',
]

Mapping: diagramme

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
map_to_trigrams function
profs
<r1>

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
map_to_trigrams function
profs
<r1>
results
<r5>
<r5>
[]

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
map_to_trigrams function
profs
<r1>
results
<r5>
prof
<r2>
<r5>
[]

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
map_to_trigrams function
profs
<r1>
results
<r5>
prof
<r2>
<r5>
'LUR'
0

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
map_to_trigrams function
profs
<r1>
results
<r5>
prof
<r3>
<r5>
'LUR'
0

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
map_to_trigrams function
profs
<r1>
results
<r5>
prof
<r3>
<r5>
'LUR'
0
'LRG'
1

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
map_to_trigrams function
profs
<r1>
results
<r5>
prof
<r4>
<r5>
'LUR'
0
'LRG'
1

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
map_to_trigrams function
profs
<r1>
results
<r5>
prof
<r4>
<r5>
'LUR'
0
'LRG'
1
'FKY'
2

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
map_to_trigrams function
profs
<r1>
results
<r5>
prof
<r4>
<return>
<r5>
<r5>
'LUR'
0
'LRG'
1
'FKY'
2

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
<r5>
'LUR'
0
'LRG'
1
'FKY'
2
trigrams
<r5>

Mapping: code

def map_to_trigrams(profs):
  results = []
  for prof in profs:
    results.append(prof[0])
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

trigrams = map_to_trigrams(profs)
print(trigrams)
RAM
map_to_trigrams
<function>
profs
<r1>
<r1>
<r2>
0
<r3>
1
<r4>
2
<r2>
'LUR'
0
'Quentin Lurkin'
1
<r3>
'LRG'
0
'André Lorge'
1
<r4>
'FKY'
0
'Martin Fockedey'
1
<r5>
'LUR'
0
'LRG'
1
'FKY'
2
trigrams
<r5>
['LUR', 'LRG', 'FKY']

Transformation structure

# Transforme une liste de profs

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]
# En une liste de descriptions
# prêtes à être affichées
trigrams = [
  'Quentin Lurkin (LUR)'
  'André Lorge (LRG)',
  'Martin Fockedey (FKY)',
]

Mapping: diagramme

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
[]

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
[]
prof
'LUR'
0
'Quentin Lurkin'
1

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
[]
prof
'LUR'
0
'Quentin Lurkin'
1
desc
'Quentin Lurkin (LUR)'

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
'Quentin Lurkin (LUR)'
0
prof
'LUR'
0
'Quentin Lurkin'
1
desc
'Quentin Lurkin (LUR)'

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
'Quentin Lurkin (LUR)'
0
prof
'LRG'
0
'André Lorge'
1
desc
'Quentin Lurkin (LUR)'

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
'Quentin Lurkin (LUR)'
0
prof
'LRG'
0
'André Lorge'
1
desc
'André Lorge (LRG)'

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
'Quentin Lurkin (LUR)'
0
'André Lorge (LRG)'
1
prof
'LRG'
0
'André Lorge'
1
desc
'André Lorge (LRG)'

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
'Quentin Lurkin (LUR)'
0
'André Lorge (LRG)'
1
prof
'FKY'
0
'Martin Fockedey'
1
desc
'André Lorge (LRG)'

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
'Quentin Lurkin (LUR)'
0
'André Lorge (LRG)'
1
prof
'FKY'
0
'Martin Fockedey'
1
desc
'Martin Fockedey (FKY)'

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
'Quentin Lurkin (LUR)'
0
'André Lorge (LRG)'
1
'Martin Fockedey (FKY)'
2
prof
'FKY'
0
'Martin Fockedey'
1
desc
'Martin Fockedey (FKY)'

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
map_to_trigrams function
profs
<ref global profs>
results
'Quentin Lurkin (LUR)'
0
'André Lorge (LRG)'
1
'Martin Fockedey (FKY)'
2
prof
'FKY'
0
'Martin Fockedey'
1
desc
'Martin Fockedey (FKY)'
<return>
<ref results>

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
desc
'Quentin Lurkin (LUR)'
0
'André Lorge (LRG)'
1
'Martin Fockedey (FKY)'
2

Mapping: code

def map_to_desc(profs):
  results = []
  for prof in profs:
    desc = f"{prof[1]} ({prof[0]})"
    results.append(desc)
  return results

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
]

desc = map_to_trigrams(profs)
print(desc)

Toutes les références ne sont pas représentées

RAM
map_to_desc
<function>
profs
[...]
desc
'Quentin Lurkin (LUR)'
0
'André Lorge (LRG)'
1
'Martin Fockedey (FKY)'
2
['Quentin Lurkin (LUR)', 'André Lorge (LRG)', 'Martin Fockedey (FKY)']

Mapping

Les fonctions sont des valeurs

from math import cos, pi

a = cos # Pas de parenthèse! On n'appelle pas la fonction.
        # On l'assigne à la variable `a`

a(pi/2) # `a` fait référence à la fonction `cos`. Si on
        # appelle `a`, on appelle `cos`

Les fonctions sont des valeurs

# la structure d'un mapping. `processing` est la fonction
# qui sera appliquée aux éléments de `L`
def map(processing, L):
  results = []
  for elem in L:
    results.append(processing(elem))
  return results

# transforme 1 prof
def describe(prof):
  return f"{prof[1]} ({prof[0]})"

# on transforme tous les profs
descriptions = map(describe, profs)

def get_trigram(prof):
  return prof[0]

trigrams = map(get_trigram, profs)

La fonction map

Le filtrage

# A partir de cette liste
numbers = [42, 165, 69, 18, 24]

# On veut obtenir celle-ci qui ne contient que les nombre pairs
even = [42, 18, 24]

# Ou ne garder que les nombres plus grands que 60
big = [165, 69]

Filtrage: Diagramme

La fonction filter

Code filter

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_even(x):
  return x % 2 == 0

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

even = filter(is_even, L)
big = filter(is_big, L)

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
[]

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
[]
item
42

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
[]
item
42
function condition
x
42

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
[]
item
42
function condition
x
42
<return>
False

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
[]
item
42
<tmp>
False

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
[]
item
165

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
[]
item
165
function condition
x
165

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
[]
item
165
function condition
x
165
<return>
True

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
[]
item
165
<tmp>
True

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
item
165

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
item
69

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
item
69
function condition
x
69

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
item
69
function condition
x
69
<return>
True

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
item
69
<tmp>
True

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
69
1
item
69

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
69
1
item
18

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
69
1
item
18
function condition
x
18

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
69
1
item
18
function condition
x
18
<return>
False

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
69
1
item
18
<tmp>
False

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
69
1
item
24

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
69
1
item
24
function condition
x
24

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
69
1
item
24
function condition
x
24
<return>
False

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
69
1
item
24
<tmp>
False

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
function filter
condition
<function2>
L
<numbers>
res
165
0
69
1
item
24
<return>
<res>

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
big
165
0
69
1

Filter: code

def filter(condition, L):
  res = []
  for item in L:
    if condition(item):
      res.append(item)
  return res

def is_big(x):
  return x > 60

numbers = [42, 165, 69, 18, 24]

big = filter(is_big, numbers)
print(big)

Toutes les références ne sont pas représentées

RAM
filter
<function1>
is_big
<function2>
numbers
42
0
165
1
69
2
18
3
24
4
big
165
0
69
1
[165, 69]

La fonction filter

L’accumulation

# A partir de cette liste
numbers = [42, 165, 69, 18, 24]

# Obtenir la valeur minimale
minimum = 18

# Ou obtenir la somme des éléments
total = 318

Accumulation: Diagramme

Accumulation

La fonction reduce()

# la fonction `update` reçoit la valeur de l'accumulateur et un élément de la liste
def reduce(update, L, initial):
  acc = initiale
  for item in L:
    acc = update(acc, item)
  return acc

numbers = [42, 165, 69, 18, 24]

def add(a, b):
  return a + b

def min(a, b):
  if a < b:
    return a
  return b

total = reduce(add, numbers, 0)
minimum = reduce(min, numbers, numbers[0])

La fonction reduce()

from functools import reduce

numbers = [42, 165, 69, 18, 24]

def add(a, b):
  return a + b

def min(a, b):
  if a < b:
    return a
  return b

# Les appels deviennent plus simples avec le `reduce` de `functools`
total = reduce(add, numbers)
minimum = reduce(min, numbers)

Exemple plus complexe

students = [
  ['Pierre', '1BA', 17],
  ['Mohamed', '2BA', 18],
  ['Paul', '1BA', 18],
  ['Jacques', '1BA', 17],
  ['Claudine', '2BA', 19],
  ['Charlotte', '1BA', 18],
  ['John', '1BA', 20],
  ['Pauline', '1BA', 17],
  ['Tom', '2BA', 24],
]

Fonctions utiles

NAME = 0
BLOCK = 1
AGE = 2

def is_1BA(student):
  return student[BLOCK] == '1BA'

def get_age(student):
  return student[AGE]

En décomposant

from functools import reduce

students_1ba = filter(is_1BA, students)
ages = map(get_age, students_1ba)
mean_age = reduce(add, ages) / len(ages)

Sans décomposer

acc = 0
count = 0
for student in students:
  if is_1BA(student):
    count += 1
    acc += get_age(student)
mean_age = acc/count
  • Cette version n’est pas mauvaise
  • Mais dans la version précédente, les fonctions map, filter et reduce nous ont permis d’aborder le problème avec un modèle mental beaucoup plus simple

Trier une liste

Recherche dans une liste non triée

def search(L, target):
    for i in range(len(L)):
        if L[i] == target:
            return i
    return None
  • On est obligé de tester tous les éléments un par un

Recherche dans une liste triée

Recherche dans une liste triée

def dichotomic_search(L, x):
    left = 0
    right = len(L) - 1

    while left <= right:
        mid = (left + right) // 2

        if L[mid] == x:
            return mid

        if L[mid] < x:
            left = mid + 1
        else:
            right = mid - 1

    return None

Speed Test

from time import perf_counter
from random import shuffle

# créer une grande liste triée
L = list(range(100000))

start = perf_counter()
print(search(L, 90000))
print("Time:", perf_counter() - start) # Time: 0.002944834006484598

start = perf_counter()
print(dichotomic_search(L, 90000))
print("Time:", perf_counter() - start) # Time: 6.416026735678315e-06

Speed Test

Logarithmique vs linéaire

Tri par insertion

On veut placer 3.

Entrée
3
↑
i
6
2
8
1
9
4
0
7
5
Sortie
 

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
↑
i
6
2
8
1
9
4
0
7
5
Sortie
 
↑
j

Tri par insertion

On insere 3 au bon endroit.

Entrée
3
↑
i
6
2
8
1
9
4
0
7
5
Sortie
3
↑
j

Tri par insertion

On veut placer 6.

Entrée
3
6
↑
i
2
8
1
9
4
0
7
5
Sortie
3

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
↑
i
2
8
1
9
4
0
7
5
Sortie
3
↑
j

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
↑
i
2
8
1
9
4
0
7
5
Sortie
3
 
↑
j

Tri par insertion

On insere 6 au bon endroit.

Entrée
3
6
↑
i
2
8
1
9
4
0
7
5
Sortie
3
6
↑
j

Tri par insertion

On veut placer 2.

Entrée
3
6
2
↑
i
8
1
9
4
0
7
5
Sortie
3
6

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
↑
i
8
1
9
4
0
7
5
Sortie
3
↑
j
6

Tri par insertion

On insere 2 au bon endroit.

Entrée
3
6
2
↑
i
8
1
9
4
0
7
5
Sortie
2
↑
j
3
6

Tri par insertion

On veut placer 8.

Entrée
3
6
2
8
↑
i
1
9
4
0
7
5
Sortie
2
3
6

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
↑
i
1
9
4
0
7
5
Sortie
2
↑
j
3
6

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
↑
i
1
9
4
0
7
5
Sortie
2
3
↑
j
6

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
↑
i
1
9
4
0
7
5
Sortie
2
3
6
↑
j

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
↑
i
1
9
4
0
7
5
Sortie
2
3
6
 
↑
j

Tri par insertion

On insere 8 au bon endroit.

Entrée
3
6
2
8
↑
i
1
9
4
0
7
5
Sortie
2
3
6
8
↑
j

Tri par insertion

On veut placer 1.

Entrée
3
6
2
8
1
↑
i
9
4
0
7
5
Sortie
2
3
6
8

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
↑
i
9
4
0
7
5
Sortie
2
↑
j
3
6
8

Tri par insertion

On insere 1 au bon endroit.

Entrée
3
6
2
8
1
↑
i
9
4
0
7
5
Sortie
1
↑
j
2
3
6
8

Tri par insertion

On veut placer 9.

Entrée
3
6
2
8
1
9
↑
i
4
0
7
5
Sortie
1
2
3
6
8

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
↑
i
4
0
7
5
Sortie
1
↑
j
2
3
6
8

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
↑
i
4
0
7
5
Sortie
1
2
↑
j
3
6
8

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
↑
i
4
0
7
5
Sortie
1
2
3
↑
j
6
8

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
↑
i
4
0
7
5
Sortie
1
2
3
6
↑
j
8

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
↑
i
4
0
7
5
Sortie
1
2
3
6
8
↑
j

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
↑
i
4
0
7
5
Sortie
1
2
3
6
8
 
↑
j

Tri par insertion

On insere 9 au bon endroit.

Entrée
3
6
2
8
1
9
↑
i
4
0
7
5
Sortie
1
2
3
6
8
9
↑
j

Tri par insertion

On veut placer 4.

Entrée
3
6
2
8
1
9
4
↑
i
0
7
5
Sortie
1
2
3
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
↑
i
0
7
5
Sortie
1
↑
j
2
3
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
↑
i
0
7
5
Sortie
1
2
↑
j
3
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
↑
i
0
7
5
Sortie
1
2
3
↑
j
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
↑
i
0
7
5
Sortie
1
2
3
6
↑
j
8
9

Tri par insertion

On insere 4 au bon endroit.

Entrée
3
6
2
8
1
9
4
↑
i
0
7
5
Sortie
1
2
3
4
↑
j
6
8
9

Tri par insertion

On veut placer 0.

Entrée
3
6
2
8
1
9
4
0
↑
i
7
5
Sortie
1
2
3
4
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
↑
i
7
5
Sortie
1
↑
j
2
3
4
6
8
9

Tri par insertion

On insere 0 au bon endroit.

Entrée
3
6
2
8
1
9
4
0
↑
i
7
5
Sortie
0
↑
j
1
2
3
4
6
8
9

Tri par insertion

On veut placer 7.

Entrée
3
6
2
8
1
9
4
0
7
↑
i
5
Sortie
0
1
2
3
4
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
↑
i
5
Sortie
0
↑
j
1
2
3
4
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
↑
i
5
Sortie
0
1
↑
j
2
3
4
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
↑
i
5
Sortie
0
1
2
↑
j
3
4
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
↑
i
5
Sortie
0
1
2
3
↑
j
4
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
↑
i
5
Sortie
0
1
2
3
4
↑
j
6
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
↑
i
5
Sortie
0
1
2
3
4
6
↑
j
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
↑
i
5
Sortie
0
1
2
3
4
6
8
↑
j
9

Tri par insertion

On insere 7 au bon endroit.

Entrée
3
6
2
8
1
9
4
0
7
↑
i
5
Sortie
0
1
2
3
4
6
7
↑
j
8
9

Tri par insertion

On veut placer 5.

Entrée
3
6
2
8
1
9
4
0
7
5
↑
i
Sortie
0
1
2
3
4
6
7
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
5
↑
i
Sortie
0
↑
j
1
2
3
4
6
7
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
5
↑
i
Sortie
0
1
↑
j
2
3
4
6
7
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
5
↑
i
Sortie
0
1
2
↑
j
3
4
6
7
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
5
↑
i
Sortie
0
1
2
3
↑
j
4
6
7
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
5
↑
i
Sortie
0
1
2
3
4
↑
j
6
7
8
9

Tri par insertion

On cherche le bon emplacement j dans la sortie.

Entrée
3
6
2
8
1
9
4
0
7
5
↑
i
Sortie
0
1
2
3
4
6
↑
j
7
8
9

Tri par insertion

On insere 5 au bon endroit.

Entrée
3
6
2
8
1
9
4
0
7
5
↑
i
Sortie
0
1
2
3
4
5
↑
j
6
7
8
9

Tri par insertion

Terminé !

Entrée
3
6
2
8
1
9
4
0
7
5
Sortie
0
1
2
3
4
5
6
7
8
9

Tri par insertion: Diagramme

Tri par insertion: Code

def insert_sort(L):
    res = []
    for item in L:
        j = 0
        while j < len(res) and res[j] <= item:
            j += 1
        res.insert(j, item)
    return res

Tri en place

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On veut placer 6.

Liste
3
6
↑
i
2
8
1
9
4
0
7
5
Tmp
 

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On sauve 6 dans Tmp.

Liste
3
6
↑
i
2
8
1
9
4
0
7
5
Tmp
6

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche le bon emplacement j en partant de la fin.

Liste
3
6
↑
j=i
2
8
1
9
4
0
7
5
Tmp
6

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche en décalant les valeurs pour faire une place à 6.

Liste
3
↑
j-1
6
↑
j
2
8
1
9
4
0
7
5
Tmp
6

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

j est au bon endroit.

Liste
3
6
↑
j
2
8
1
9
4
0
7
5
Tmp
6

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On met 6 au bon endroit.

Liste
3
6
↑
j
2
8
1
9
4
0
7
5
Tmp
6

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On veut placer 2.

Liste
3
6
2
↑
i
8
1
9
4
0
7
5
Tmp
6

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On sauve 2 dans Tmp.

Liste
3
6
2
↑
i
8
1
9
4
0
7
5
Tmp
2

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche le bon emplacement j en partant de la fin.

Liste
3
6
2
↑
j=i
8
1
9
4
0
7
5
Tmp
2

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche en décalant les valeurs pour faire une place à 2.

Liste
3
6
↑
j-1
2
↑
j
8
1
9
4
0
7
5
Tmp
2

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 6

Liste
3
6
↑
j-1
6
↑
j
8
1
9
4
0
7
5
Tmp
2

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
3
↑
j-1
6
↑
j
6
↑
i
8
1
9
4
0
7
5
Tmp
2

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 3

Liste
3
↑
j-1
3
↑
j
6
↑
i
8
1
9
4
0
7
5
Tmp
2

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
3
↑
j
3
6
↑
i
8
1
9
4
0
7
5
Tmp
2

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

j est au bon endroit.

Liste
3
↑
j
3
6
↑
i
8
1
9
4
0
7
5
Tmp
2

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On met 2 au bon endroit.

Liste
2
↑
j
3
6
↑
i
8
1
9
4
0
7
5
Tmp
2

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On veut placer 8.

Liste
2
3
6
8
↑
i
1
9
4
0
7
5
Tmp
2

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On sauve 8 dans Tmp.

Liste
2
3
6
8
↑
i
1
9
4
0
7
5
Tmp
8

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche le bon emplacement j en partant de la fin.

Liste
2
3
6
8
↑
j=i
1
9
4
0
7
5
Tmp
8

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche en décalant les valeurs pour faire une place à 8.

Liste
2
3
6
↑
j-1
8
↑
j
1
9
4
0
7
5
Tmp
8

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

j est au bon endroit.

Liste
2
3
6
8
↑
j
1
9
4
0
7
5
Tmp
8

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On met 8 au bon endroit.

Liste
2
3
6
8
↑
j
1
9
4
0
7
5
Tmp
8

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On veut placer 1.

Liste
2
3
6
8
1
↑
i
9
4
0
7
5
Tmp
8

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On sauve 1 dans Tmp.

Liste
2
3
6
8
1
↑
i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche le bon emplacement j en partant de la fin.

Liste
2
3
6
8
1
↑
j=i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche en décalant les valeurs pour faire une place à 1.

Liste
2
3
6
8
↑
j-1
1
↑
j
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 8

Liste
2
3
6
8
↑
j-1
8
↑
j
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
2
3
6
↑
j-1
8
↑
j
8
↑
i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 6

Liste
2
3
6
↑
j-1
6
↑
j
8
↑
i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
2
3
↑
j-1
6
↑
j
6
8
↑
i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 3

Liste
2
3
↑
j-1
3
↑
j
6
8
↑
i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
2
↑
j-1
3
↑
j
3
6
8
↑
i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 2

Liste
2
↑
j-1
2
↑
j
3
6
8
↑
i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
2
↑
j
2
3
6
8
↑
i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

j est au bon endroit.

Liste
2
↑
j
2
3
6
8
↑
i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On met 1 au bon endroit.

Liste
1
↑
j
2
3
6
8
↑
i
9
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On veut placer 9.

Liste
1
2
3
6
8
9
↑
i
4
0
7
5
Tmp
1

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On sauve 9 dans Tmp.

Liste
1
2
3
6
8
9
↑
i
4
0
7
5
Tmp
9

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche le bon emplacement j en partant de la fin.

Liste
1
2
3
6
8
9
↑
j=i
4
0
7
5
Tmp
9

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche en décalant les valeurs pour faire une place à 9.

Liste
1
2
3
6
8
↑
j-1
9
↑
j
4
0
7
5
Tmp
9

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

j est au bon endroit.

Liste
1
2
3
6
8
9
↑
j
4
0
7
5
Tmp
9

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On met 9 au bon endroit.

Liste
1
2
3
6
8
9
↑
j
4
0
7
5
Tmp
9

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On veut placer 4.

Liste
1
2
3
6
8
9
4
↑
i
0
7
5
Tmp
9

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On sauve 4 dans Tmp.

Liste
1
2
3
6
8
9
4
↑
i
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche le bon emplacement j en partant de la fin.

Liste
1
2
3
6
8
9
4
↑
j=i
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche en décalant les valeurs pour faire une place à 4.

Liste
1
2
3
6
8
9
↑
j-1
4
↑
j
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 9

Liste
1
2
3
6
8
9
↑
j-1
9
↑
j
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
1
2
3
6
8
↑
j-1
9
↑
j
9
↑
i
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 8

Liste
1
2
3
6
8
↑
j-1
8
↑
j
9
↑
i
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
1
2
3
6
↑
j-1
8
↑
j
8
9
↑
i
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 6

Liste
1
2
3
6
↑
j-1
6
↑
j
8
9
↑
i
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
1
2
3
↑
j-1
6
↑
j
6
8
9
↑
i
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

j est au bon endroit.

Liste
1
2
3
6
↑
j
6
8
9
↑
i
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On met 4 au bon endroit.

Liste
1
2
3
4
↑
j
6
8
9
↑
i
0
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On veut placer 0.

Liste
1
2
3
4
6
8
9
0
↑
i
7
5
Tmp
4

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On sauve 0 dans Tmp.

Liste
1
2
3
4
6
8
9
0
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche le bon emplacement j en partant de la fin.

Liste
1
2
3
4
6
8
9
0
↑
j=i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche en décalant les valeurs pour faire une place à 0.

Liste
1
2
3
4
6
8
9
↑
j-1
0
↑
j
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 9

Liste
1
2
3
4
6
8
9
↑
j-1
9
↑
j
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
1
2
3
4
6
8
↑
j-1
9
↑
j
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 8

Liste
1
2
3
4
6
8
↑
j-1
8
↑
j
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
1
2
3
4
6
↑
j-1
8
↑
j
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 6

Liste
1
2
3
4
6
↑
j-1
6
↑
j
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
1
2
3
4
↑
j-1
6
↑
j
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 4

Liste
1
2
3
4
↑
j-1
4
↑
j
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
1
2
3
↑
j-1
4
↑
j
4
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 3

Liste
1
2
3
↑
j-1
3
↑
j
4
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
1
2
↑
j-1
3
↑
j
3
4
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 2

Liste
1
2
↑
j-1
2
↑
j
3
4
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
1
↑
j-1
2
↑
j
2
3
4
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 1

Liste
1
↑
j-1
1
↑
j
2
3
4
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
1
↑
j
1
2
3
4
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

j est au bon endroit.

Liste
1
↑
j
1
2
3
4
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On met 0 au bon endroit.

Liste
0
↑
j
1
2
3
4
6
8
9
↑
i
7
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On veut placer 7.

Liste
0
1
2
3
4
6
8
9
7
↑
i
5
Tmp
0

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On sauve 7 dans Tmp.

Liste
0
1
2
3
4
6
8
9
7
↑
i
5
Tmp
7

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche le bon emplacement j en partant de la fin.

Liste
0
1
2
3
4
6
8
9
7
↑
j=i
5
Tmp
7

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche en décalant les valeurs pour faire une place à 7.

Liste
0
1
2
3
4
6
8
9
↑
j-1
7
↑
j
5
Tmp
7

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 9

Liste
0
1
2
3
4
6
8
9
↑
j-1
9
↑
j
5
Tmp
7

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
0
1
2
3
4
6
8
↑
j-1
9
↑
j
9
↑
i
5
Tmp
7

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 8

Liste
0
1
2
3
4
6
8
↑
j-1
8
↑
j
9
↑
i
5
Tmp
7

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
0
1
2
3
4
6
↑
j-1
8
↑
j
8
9
↑
i
5
Tmp
7

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

j est au bon endroit.

Liste
0
1
2
3
4
6
8
↑
j
8
9
↑
i
5
Tmp
7

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On met 7 au bon endroit.

Liste
0
1
2
3
4
6
7
↑
j
8
9
↑
i
5
Tmp
7

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On veut placer 5.

Liste
0
1
2
3
4
6
7
8
9
5
↑
i
Tmp
7

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On sauve 5 dans Tmp.

Liste
0
1
2
3
4
6
7
8
9
5
↑
i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche le bon emplacement j en partant de la fin.

Liste
0
1
2
3
4
6
7
8
9
5
↑
j=i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On cherche en décalant les valeurs pour faire une place à 5.

Liste
0
1
2
3
4
6
7
8
9
↑
j-1
5
↑
j
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 9

Liste
0
1
2
3
4
6
7
8
9
↑
j-1
9
↑
j
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
0
1
2
3
4
6
7
8
↑
j-1
9
↑
j
9
↑
i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 8

Liste
0
1
2
3
4
6
7
8
↑
j-1
8
↑
j
9
↑
i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
0
1
2
3
4
6
7
↑
j-1
8
↑
j
8
9
↑
i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 7

Liste
0
1
2
3
4
6
7
↑
j-1
7
↑
j
8
9
↑
i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
0
1
2
3
4
6
↑
j-1
7
↑
j
7
8
9
↑
i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On décale 6

Liste
0
1
2
3
4
6
↑
j-1
6
↑
j
7
8
9
↑
i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On continue de chercher

Liste
0
1
2
3
4
↑
j-1
6
↑
j
6
7
8
9
↑
i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

j est au bon endroit.

Liste
0
1
2
3
4
6
↑
j
6
7
8
9
↑
i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

On met 5 au bon endroit.

Liste
0
1
2
3
4
5
↑
j
6
7
8
9
↑
i
Tmp
5

Tri par insertion en place

i indique l'élement en cours de placement. Les éléments avant i sont triés. Ceux après reste à trier.

Terminé !

Liste
0
1
2
3
4
5
6
7
8
9
Tmp
5

Tri par insertion en place: Diagramme

Tri par insertion en place: Code

def insert_sort_in_place(L):
    for i in range(1, len(L)):
        tmp = L[i]
        j = i
        while j > 0 and L[j - 1] > tmp:
            L[j] = L[j - 1]
            j -= 1
        L[j] = tmp

sort() et sorted()

L = [3, 6, 2, 8, 1, 9, 4, 0, 7, 5]
L.sort()
print(L)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
L = [3, 6, 2, 8, 1, 9, 4, 0, 7, 5]
L2 = sorted(L)
print(L2)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# `L` est inchangé

sort() et sorted()

L = [3, 6, 2, 8, 1, 9, 4, 0, 7, 5]
L.sort(reverse=True)
print(L)
# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

sort() et sorted()

profs = [
  ['LUR', 'Quentin Lurkin'],
  ['LRG', 'André Lorge'],
  ['FKY', 'Martin Fockedey'],
  ['FLE', 'Clémence Flémal'],
]

def get_trigram(prof):
  return prof[0]

# trigramme comme clé de tri
L.sort(key=get_trigram)
print(L)
# profs = [
#   ['FKY', 'Martin Fockedey'],
#   ['FLE', 'Clémence Flémal'],
#   ['LRG', 'André Lorge'],
#   ['LUR', 'Quentin Lurkin'],
# ]