Как выбрать диапазон с вводом пользователя в список - PullRequest
1 голос
/ 25 мая 2019

Я хочу выбрать диапазон между элементами в списке, но вместо того, чтобы помещать, например, пункт 7, я помещаю то, что вижу в элементах. Число между «документом» и «35621» меняется, мне нужно преобразовать эти числа в диапазон (я думаю?)

Я действительно не знаю, как это сделать.

data_input = raw_input("\nEnter range: \n")

my_list = ['document-452-35621', 'document-453-35621', 'document-454-35621', 'document-455-35621', 'document-456-35621', 'document-457-35621', 'document-458-35621', 'document-459-35621', 'document-460-35621']

print my_list[5:9] 

Например, в моем списке:

[
    'document-452-35621', 
    'document-453-35621', 
    'document-454-35621', 
    'document-455-35621', 
    'document-456-35621', 
    'document-457-35621', 
    'document-458-35621', 
    'document-459-35621', 
    'document-460-35621'
]

Я ввожу в выбор ввода: 456-460

Результат будет:

[
    'document-456-35621',
    'document-457-35621',
    'document-458-35621',
    'document-459-35621',
    'document-460-35621'
]

Ответы [ 3 ]

1 голос
/ 25 мая 2019

см. Код, указанный ниже: [n for n in my_list if int(ranges[0]) <= int(n.split('-')[1]) <= int(ranges[1])]

Это полный код.

data_input = input("\nEnter range: \n")

my_list = ['document-452-35621', 'document-453-35621', 'document-454-35621', 'document-455-35621', 'document-456-35621', 'document-457-35621', 'document-458-35621', 'document-459-35621', 'document-460-35621']

ranges = data_input.split('-')
result = [n for n in my_list if int(ranges[0]) <= int(n.split('-')[1]) <= int(ranges[1])]
print (result)
1 голос
/ 25 мая 2019

Вы должны привести вход к int:

my_list = [
'document-452-35621',
'document-453-35621',
'document-454-35621',
'document-455-35621',
'document-456-35621',
'document-457-35621',
'document-458-35621',
'document-459-35621',
'document-460-35621'
]

data_input = input("\nEnter range: \n").split('-')

print([x for x in my_list if int(data_input[0])<=int(x.split('-')[1]))<=int(data_input[1])]

вывод будет:

['document-456-35621',
'document-457-35621', 
'document-458-35621', 
'document-459-35621', 
'document-460-35621']
0 голосов
/ 25 мая 2019

Вы можете сделать это так:

my_list = [
    'document-452-35621',
    'document-453-35621',
    'document-454-35621',
    'document-455-35621',
    'document-456-35621',
    'document-457-35621',
    'document-458-35621',
    'document-459-35621',
    'document-460-35621'
]

data_input = input("\nEnter range: \n").split('-') # ['456', '460']
lower_bound = int(data_input[0]) # 456
upper_bound = int(data_input[1]) # 460

new_list = []
for item in my_list:
    if lower_bound <= int(item.split('-')[1]) <= upper_bound:
        new_list.append(item)

print(new_list)

Или, альтернативно, вы можете использовать Список понимания и делать это так:

new_list = [item for item in my_list if lower_bound <= int(item.split('-')[1]) <= upper_bound]
print(new_list)

Выход:

[
    'document-456-35621',
    'document-457-35621',
    'document-458-35621',
    'document-459-35621',
    'document-460-35621'
]

Я вижу, что вы используете Python 2, поэтому я думаю, что единственное отличие заключается в print и raw_input. Однако, поскольку « Python 2.7 не будет поддерживаться после 2020 года, », я бы рекомендовал вам использовать Python 3 и выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...