преобразование списка целых чисел в диапазон в python

#!/bin/sh
PRG="$0"

# need this for relative symlinks
while [ -h "$PRG" ] ; do
   PRG=`readlink "$PRG"`
done

scriptdir=`dirname "$PRG"`
31
задан Akhil 7 January 2011 в 17:24
поделиться

2 ответа

Этот генератор:

def ranges(p):
    q = sorted(p)
    i = 0
    for j in xrange(1,len(q)):
        if q[j] > 1+q[j-1]:
            yield (q[i],q[j-1])
            i = j
    yield (q[i], q[-1])

sample = [0, 1, 2, 3, 4, 7, 8, 9, 11]
print list(ranges(sample))
print list(ranges(reversed(sample)))
print list(ranges([1]))
print list(ranges([2,3,4]))
print list(ranges([0,2,3,4]))
print list(ranges(5*[1]))

Производит эти результаты:

[(0, 4), (7, 9), (11, 11)]
[(0, 4), (7, 9), (11, 11)]
[(1, 1)]
[(2, 4)]
[(0, 0), (2, 4)]
[(1, 1)]

Обратите внимание, что серии повторяющихся чисел сжимаются . Я не знаю, если вы этого хотите. Если нет, замените > на !=.

Я понимаю ваш вопрос. Я посмотрел в itertools и попытался придумать решение, которое можно было бы сделать в нескольких строках Python, которое можно было бы квалифицировать как как «почти встроенный» , но я не смог придумать с чем угодно.

3
ответ дан 27 November 2019 в 22:08
поделиться

Ничего встроенного или каких-либо библиотек, о которых я знаю. Не очень полезно, я знаю, но я никогда не сталкивался с тем, что ты хочешь.

Вот несколько идей для вашей программы по крайней мере (на C ++, но она может дать вам некоторые другие идеи):

Преобразование наборов целых чисел в диапазоны

1
ответ дан 27 November 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: