Olivier Guibé - LMRS, fortement inspiré d'un document de Pierre Navaro (IRMAR).

Strings, listes, tuples et dictionnaires à toute vitesse

Chaînes de caractères ou Strings

Comme d'habitude, entre " " ,"caractères\nà la ligne", entre ' ', 'caractères\nà la ligne' et \ comme caractère d'échappement (tabulation, à la ligne, etc.)

In [4]:
print('Un seul "exemple" suffira.\nAvec deux lignes et\n\t deux \ttabulations c\'est mieux') 
print("Un seul \"exemple\" suffira.\nAvec deux lignes et\n\t deux \ttabulations c'est mieux") 
Un seul "exemple" suffira.
Avec deux lignes et
	 deux 	tabulations c'est mieux
Un seul "exemple" suffira.
Avec deux lignes et
	 deux 	tabulations c'est mieux

Opérations possibles

In [3]:
# 3 fois 'C', suivi de 'B' 
print("Votre note PEDR: ", 3 * 'C' + 'B')
Votre note PEDR:  CCCB

Les éléments des chaînes de caractères sont indexés

In [7]:
word = 'Python'
print(word[0]) # caractère en position 0, le 1er donc !
print(word[5]) # caractère en position 5, le 6ème donc !
print(word[6]) # erreur
P
n
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-7-3421e67e23f1> in <module>()
      2 print(word[0]) # caractère en position 0, le 1er donc !
      3 print(word[5]) # caractère en position 5, le 6ème donc !
----> 4 print(word[6]) # erreur

IndexError: string index out of range

Il est même possible de faire des indices négatifs

In [7]:
print(word[-1])  # dernier caractère
print(word[-2])  # avant dernier character
n
o

Slicing

C'est très utile aussi pour extraire des éléments des vecteurs, matrices. a:b:step équivaut aux entiers allant a à b (non inclus) par pas de step

  • :b:step équivaut à 0:b:step,
  • a::step équivaut à a:b+1:step
  • pour du décroissant step=-1 par exemple

Attention b n'est pas inclus !

In [8]:
print(word[:2])  # du début jusqu'à position 2 (exclus)
print(word[4:])  # characters from position 4 (included) to the end
print(word[-2:]) # characters from the second-last (included) to the end
print(word[::-1]) # This is the reversed string!
Py
on
on
nohtyP

Il n'est pas possible de modifier un élément d'une chaîne de caractère, l'appelation est "non mutable" ou "immutable". Dans ce cas il faut créer une nouvelle chaîne de caractères.

In [8]:
word[0] = 'J'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-91a956888ca7> in <module>()
----> 1 word[0] = 'J'

TypeError: 'str' object does not support item assignment

On peut jouer avec les strings...

Listes

  • on peut mettre ce que l'on veut dans une liste
  • éléments séparés par une virgule le tout entouré des crochets '[' et ']'
  • éléments indexés par position, slicing
  • concaténation
  • mutable
In [46]:
malist=['OG', 1, 2, 3, True]
print(malist)
['OG', 1, 2, 3, True]
In [47]:
print(malist[0])
print(malist[-1])
print(malist[2:4])
OG
True
[2, 3]
In [48]:
malist+=[False, 4, 5]
print(malist)
['OG', 1, 2, 3, True, False, 4, 5]

Une liste est mutable

In [49]:
malist[0]=0
print(malist)
[0, 1, 2, 3, True, False, 4, 5]
In [50]:
malist.append(6) # ajoute l'élément 6
print(malist)
[0, 1, 2, 3, True, False, 4, 5, 6]
In [51]:
malist.remove(4) 
print(malist)
[0, 1, 2, 3, True, False, 5, 6]

Mais attention

In [52]:
malist.remove(False)  # False c'est 0 et en fait le premier 0 est enlevé
print(malist)
[1, 2, 3, True, False, 5, 6]

Divers

  • assignement et slicing
  • liste de liste
  • len (longueur)
In [53]:
malist[3:6]=[10, 11, 12]
print(malist)
[1, 2, 3, 10, 11, 12, 6]
In [54]:
malist[3:6]=[]
print(malist)
[1, 2, 3, 6]
In [55]:
print(len(malist))
4
In [56]:
talist=[malist,['x', 'y', 'z']]
print(talist)
[[1, 2, 3, 6], ['x', 'y', 'z']]

Copie (attention)

Comme malist correspond à la référence mémoire : ATTENTION

In [60]:
a=[0,1]; b=a
b[0]="Joke"
print(a,b) # Aïe
['Joke', 1] ['Joke', 1]

Deux solutions b=a.copy() ou b=a[:] (je ne connaissais pas hier)

In [62]:
a=[0,1]; b=a.copy()
b[0]=2
print(a,b)
a=[0,1]; b=a[:]
b[0]=2
print(a,b)
[0, 1] [2, 1]
[0, 1] [2, 1]

Tuple

Il s'agit d'une liste non modifiable, on remplace '[', ']' par '(', ')'.

In [63]:
montuple=(1,2,3,4,5,6)
print(montuple[2:-1])
montuple[1]=0
(3, 4, 5)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-63-d9d1baa310be> in <module>()
      1 montuple=(1,2,3,4,5,6)
      2 print(montuple[2:-1])
----> 3 montuple[1]=0

TypeError: 'tuple' object does not support item assignment

Dictionnaire

C'est une fonctionnalité très appréciée, la gestion intégrée des dictionnaires.

In [68]:
dict={ "bardet":"65234", "guibe":"65254", "lescot":"65224"}
dict
Out[68]:
{'bardet': '65234', 'guibe': '65254', 'lescot': '65224'}
In [72]:
print("guibe" in dict, "calka" in dict)
print(dict["guibe"])
True False
65254
In [74]:
dict["calka"]="65264"
dict
Out[74]:
{'bardet': '65234', 'calka': '65264', 'guibe': '65254', 'lescot': '65224'}
In [89]:
print("Les numéros gagnants sont: ", [int(dict[i]) for i in dict])
Les numéros gagnants sont:  [65234, 65254, 65224, 65264]