перебрать список, который будет иметь диапазон в качестве элемента и расширить его - PullRequest
1 голос
/ 04 марта 2020

Я новичок ie до python Я хочу перебрать список, в котором могут быть диапазоны, и расширить его.

def ExpandList(c):
    new_list = []
    for i in c:
        print(i)
        if '-' in i:
            low,high=i.split('-')[0],i.split('-')[-1]
            if low !=high:
                for j in range(low,high):
                    new_list.append(j)
            else:
                new_list.append(low)
        else:
            new_list.append(i)

return new_list

c = [1001-1002, 1005-1009,1010,1010-1025]

с указанным выше вводом, я хочу расширить список. когда я перебираю данный список, он не принимает 1001-1002 как отдельный элемент, если я не упомяну его как строку '1001-1002' Я не могу заставить пользователя дать это как строку .. как я могу оценить это и достичь того, что я намерен. любезно советую

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Самый простой вариант - попросить пользователя предоставить все значения в виде строк. Либо вводите их вручную в программу, либо записывайте их в текстовый файл по одному в строке. Таким образом, кавычки не будут необходимы.

Тем не менее, в python 3.8 вы можете использовать новый оператор моржа в выражении генератора, а затем объединить все диапазоны

import itertools as it

c = ['1001-1002','1005-1009','1010','1010-1025']

cx = (range(int(r[0]), int(r[1])) if len((r:=el.split('-')))>1 else [el] for el in c )

res = it.chain.from_iterable(cx)

print(list(res))

производит

[1001, 1005, 1006, 1007, 1008, '1010', 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024]

Примечание: я передаю верхний предел диапазона range как есть. В случае, если это должно быть включено, увеличьте это на один

range(int(r[0]), int(r[1])+1)
0 голосов
/ 04 марта 2020

Вы не можете сделать это. Дефис является оператором вычитания в python. Таким образом, ваш ввод будет немедленно оценен как

[-1, -4, 1010, -15]

Итак, единственный логический способ - это ввести вход в виде строки, а затем проанализировать ее позже.

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