Как преобразовать интервалы списка (в строковом формате) в целые числа?

#python #string #list

Вопрос:

Я пытаюсь преобразовать строковый интервал (пример: ‘1:10’) в полезный целочисленный интервал (пример: 1:10). Дело в том, что мои методы не работают. Я попытался сослаться на интервал строк, но это не сработало:

 x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
string_interval = '0:4'
x[string_interval]
 

Желаемый результат:

 1, 2, 3, 4, 5
 

Я также попытался преобразовать string_interval в целое число с помощью int (), но это тоже не сработало.

Ответ №1:

Вы можете использовать экземпляр среза:

 >>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> string_interval = '0:4'
>>> item = slice(*map(int, string_interval.split(":")))
>>> x[item]
[1, 2, 3, 4]
 

Ответ №2:

 >>> idx = string_interval.split(':')
>>> x[int(idx[0]):int(idx[1]) 1]
[1, 2, 3, 4, 5]
 

Добавьте 1 в конечный индекс, потому что срезы в Python увеличиваются до, но не включают значение в конечный индекс.

Ответ №3:

Вы можете создать команду типа строки и оценить ее.

 x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
string_interval = '0:4'

x_str = f'x[{string_interval}]'

x_cmd = eval(x_str)

print(x_cmd) # it is still a list object`
 

Выход

 [1, 2, 3, 4] #0:4 interval
 

Ответ №4:

Вы ищете eval: print(eval('x[%s]' % string_interval)) #[1,2,3,4]

Также обратите внимание, что вам нужно string_interval='0:5' получить [1,2,3,4,5], поскольку вы в основном даете ему диапазон.