Как я могу сделать что-то подобное:

>>> xrange(4, 10) in xrange(3, 20)
TRUE
3
Mykola Kharechko 13 Июл 2010 в 15:24

4 ответа

Лучший ответ

Как насчет (min1 >= min2) and (max1 <= max2)?

(Предполагая min1, max1 = 4, 10 и min2, max2 = 3, 20)

Примечание. Вы хотите сравнить конечные точки без фактического создания / оценки диапазонов, иначе это будет ужасно неэффективно.

edit: Это также работает; не лучше, но симпатичнее имо: min2 <= min1 <= max1 <= max2

5
tzaman 13 Июл 2010 в 11:50

Учитывая два диапазона, вы можете сделать это:

>>> a = range(10)
>>> b = range(5,15)
>>> c = range(15,25)
>>> any(x in a for x in b)
True
>>> any(x in a for x in c)
False

Это немного неэффективно, и если для проверки нужно иметь очень большие (более 100 элементов) диапазоны, лучше установить тип a вместо списка. т.е .:

>>> a = set(range(10))

Наборы не имеют порядка, но оператор in работает намного быстрее.

0
Jerub 14 Июл 2010 в 04:25
 >>>min(xrange(4, 10)) > min(range(3, 20)) and max(xrange(4, 10)) < max(range(3, 20))
 True
0
zoli2k 13 Июл 2010 в 11:27

Если вы ищете один набор, содержащийся в другом, попробуйте:

>>> set(xrange(4, 10)).issubset(set(range(3,20))

Если вы хотите сравнить конечные точки, поскольку вы всегда будете использовать для этого диапазоны, вы можете просто сравнить конечные точки, например @ zoli2k.

[РЕДАКТИРОВАТЬ] Редактирование было запрошено.

4
Scott Stafford 14 Июл 2010 в 04:20