Python Language Comparaison de différents types


Exemple

Python 2.x 2.3

Des objets de différents types peuvent être comparés. Les résultats sont arbitraires mais cohérents. Ils sont classés de manière à ce que None soit inférieur à tout, les types numériques sont plus petits que les types non numériques et tout le reste est ordonné par type lexicographiquement. Ainsi, un int est inférieur à un str et un tuple est supérieur à une list :

[1, 2] > 'foo'
# Out: False
(1, 2) > 'foo'
# Out: True
[1, 2] > (1, 2)
# Out: False
100 < [1, 'x'] < 'xyz' < (1, 'x')
# Out: True

Cela a été fait à l'origine afin qu'une liste de types mixtes puisse être triée et que les objets soient regroupés par type:

l = [7, 'x', (1, 2), [5, 6], 5, 8.0, 'y', 1.2, [7, 8], 'z']
sorted(l)
# Out: [1.2, 5, 7, 8.0, [5, 6], [7, 8], 'x', 'y', 'z', (1, 2)]
Python 3.x 3.0

Une exception est déclenchée lors de la comparaison de différents types (non numériques):

1 < 1.5
# Out: True

[1, 2] > 'foo'
# TypeError: unorderable types: list() > str()
(1, 2) > 'foo'
# TypeError: unorderable types: tuple() > str()
[1, 2] > (1, 2)
# TypeError: unorderable types: list() > tuple()

Pour trier les listes mixtes dans Python 3 par types et pour assurer la compatibilité entre les versions, vous devez fournir une clé pour la fonction triée:

>>> list = [1, 'hello', [3, 4], {'python': 2}, 'stackoverflow', 8, {'python': 3}, [5, 6]]
>>> sorted(list, key=str)
# Out: [1, 8, [3, 4], [5, 6], 'hello', 'stackoverflow', {'python': 2}, {'python': 3}]

L'utilisation de str comme fonction key convertit temporairement chaque élément en chaîne uniquement à des fins de comparaison. Il voit ensuite la représentation des chaînes commençant par [ , ' , { ou 0-9 et il est capable de les trier (et tous les caractères suivants).