将列表元素与子列表python的元素进行比较

时间:2019-02-25 15:37:59

标签: python python-3.x list sublist

我正在尝试编写一个将从列表中获取值的函数,然后查看它是否在子列表中的两个值范围内。希望我的代码能更好地解释它:

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 :(得分:2)

使用列表理解,在list1中指定的范围参数中从list2查找所有元素:

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

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

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

range()可以帮助创建一个从其第一个参数开始(不包括最后一个参数)的数字范围。它还带有一个可选的step参数,您可以在其中指定结果输出中相邻数字之间的差。如果为空则表示步骤为1。