簡體   English   中英

檢查范圍的元素是否在列表列表中

[英]Check if the elements of a range are within a list of lists

我有一個排序列表,一個范圍包含多個列表:

>>>  n= [10, 20, 30, 40]
>>>  m= [[1, 20], [21, 30]]

我想要做的是檢查n列表中的所有元素是否都在m的現有范圍內。 例如,從上面的例子中,40不在任何范圍內。

我試着在下面的帖子中擴展問題的答案,但似乎它不起作用。

檢查列表列表的所有元素是否在另一個列表列表Python中

is_there = set(tuple(x) for x in [n]).issubset(tuple(x) for x in m)

你應該遍歷n每個元素,並檢查它是否在每個m列表的范圍內。 假設您只使用int:

[any(x in range(r[0], r[1]) for r in m) for x in n]

如果您想包含范圍的結尾,只需添加1:

[any(x in range(r[0], r[1]+1) for r in m) for x in n]

簡單的方法是檢查所有元素:

items = [10, 20, 30, 40]
ranges = [[1, 20], [21, 30]]

result = all(any(low <= i <= high for low, high in ranges) for i in items)

為了好玩,您可以通過使用實際range對象使包含檢查有所不同:

range_objects = [range(low, high + 1) for low, high in ranges]
filtered_items = all(any(i in r for r in range_objects) for i in items)

如果您想獲得匹配的項目:

good = [i for i in items if any(low <= i <= high for low, high in ranges)]

你也可以得到壞元素:

bad = [i for i in items if all(i < low or i > high for low, high in ranges)]

這樣,你的原始結果就not bad

既然你說“排序列表” ,你可以使用minmax的以下邏輯。 如果n任何元素超出給定范圍,則outside將為True 如果沒有元素超出范圍,則為False

n= [10, 20, 30, 40] # < as per you, this is sorted
m= [[1,20], [21,30]]

outside = any([(min(n) < i[0] and max(n)> i[1]) for i in m])
# True

編輯在下面的評論中回答@Peter DeGlopper提出的測試用例

m = [[1, 20], [31, 40]]
n = [10, 20, 25, 30, 40]
outside = any([(l < i < r for i in n) for l, r in m])
# True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM