Я попробовал 2000000 < 4 и (2000000,) < (4,), но они возвращают false.В python, (0, 1, 2000000) <(0, 3, 4) = Правда, почему?
Но почему (0, 1, 2000000) < (0, 3, 4) возвращает истинное, хотя 2000000 больше, то 4
Я попробовал 2000000 < 4 и (2000000,) < (4,), но они возвращают false.В python, (0, 1, 2000000) <(0, 3, 4) = Правда, почему?
Но почему (0, 1, 2000000) < (0, 3, 4) возвращает истинное, хотя 2000000 больше, то 4
От docs:
кортежи и списки сравнивали лексикографически, используя сравнение соответствующих элементов.
Если не одинаково, последовательности упорядочиваются так же, как и их первые отличающиеся элементы. Например, cmp ([1,2, x], [1,2, y]) возвращает то же, что cmp (x, y).
Итак, в (0, 1, 2000000) < (0, 3, 4)
, первая пара элементов соответствует, поэтому сравнивается вторая пара. Поскольку 1 меньше 3, все дело в True
, а остальные элементы вообще не нужно оценивать.
Это, по сути, тот же порядок, который используется в телефонной книге, просто обобщенный от символов до любых типов.
Если вы хотите быстро сравнение всех элементов, вы можете использовать NumPy:
import numpy as np
np.all(np.array((0, 1, 2000000)) < np.array((0, 3, 4)))
Это дает False
, как это делает логическое И из векторизованных результатов сравнения.
Таким образом, для любого реляционного оператора он пропускает исходный набор значений в последовательности до тех пор, пока не найдет неравные элементы, а затем рассмотрит эти неравные элементы для сравнения. Я прав? – user1423015
Справа. Это известно как «лексикографическое сравнение». –