Сравнение элементов списка с элементами подсписков python - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь написать функцию, которая будет принимать значение из списка, а затем посмотреть, находится ли оно в диапазоне двух значений в подсписке.Надеюсь, мой код объяснит это лучше:

list1 = [1, 2, 3, 4, 5]
list2 = [[1, 3], [2, 4]]
answer = []
c = 0
for elem in list1:
    if list2[c] <= int(elem) <= list2[c+1]:
        answer.append(elem) 
        sys.stdout.write(str(answer) + ' ')
        c += 1


Expected Output: 
1 2 3
2 3 4

Итак, что я пытаюсь сделать, это посмотреть, находится ли значение элемента в list1 в диапазоне каждого подсписка в list2, конечно же,значения добавляются в список, а затем распечатываются.Я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "Task11.py", line 54, in <module>
    main()
  File "Task11.py", line 51, in main
    input_string()
  File "Task11.py", line 48, in input_string
    list_interval(input_list, query_values)
  File "Task11.py", line 16, in list_interval
    if int(list2[c]) <= int(elem) <= int(list2[c+1]):
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

Что я не понимаю, но я не уверен, как на самом деле использовать подсписки, как я упоминал.

1 Ответ

0 голосов
/ 25 февраля 2019

Используйте списочное понимание, которое находит все элементы из list1 в параметрах диапазона, указанных в list2:

list1 = [1, 2, 3, 4, 5]
list2 = [[1, 3], [2, 4]]

lst = [[c for c in list1 if c in <b>range(x, y+1)</b>] for x, y in list2]

print(lst)
# [[1, 2, 3], [2, 3, 4]]

range() помогает создать диапазон чисел, начиная с его первого параметра, исключая последний параметр.Он также принимает необязательный параметр шага, где вы можете указать разницу между соседними числами в результирующем выводе.Если пусто означает, что шаг равен 1.

...