Python—将条件函数(交集)应用于列表的每个元素
我有一个int的python列表,Python—将条件函数(交集)应用于列表的每个元素,python,list,Python,List,我有一个int的python列表,a。我还有另一个列表,b,它是由两个值组成的元组(c,d)。我需要查看a的任何元素是否具有介于b的任何元组元素之间的值 我认为有一种方法可以使用map()实现这一点,但我不知道如何传入元组列表的值 例如,我的数据结构如下所示: a = [1, 2, 3, 4, 5, 6, 7] b = [(12,14), (54, 78), (2,3), (9,11)] 我试图找出a中的任何元素是否在b的任何元组元素之间具有值。在上述情况下,2和3(来自a)位于b中的元组(2
a
。我还有另一个列表,b
,它是由两个值组成的元组(c,d)
。我需要查看a
的任何元素是否具有介于b
的任何元组元素之间的值
我认为有一种方法可以使用map()
实现这一点,但我不知道如何传入元组列表的值
例如,我的数据结构如下所示:
a = [1, 2, 3, 4, 5, 6, 7]
b = [(12,14), (54, 78), (2,3), (9,11)]
我试图找出a
中的任何元素是否在b
的任何元组元素之间具有值。在上述情况下,2
和3
(来自a
)位于b
中的元组(2,3)
的内部(包括内部)。因此,我的最终答案将是True
有没有人知道如何以卓越的方式做到这一点?现在,我正在遍历a
的每个元素,然后遍历b
的每个元素。这对于少量数据来说是可以的,但是我的数组非常大,这一步需要很长的时间。如果(c,d)值限制在某个范围内(比如0-100),您可以计算允许值的布尔数组,并通过简单的索引查找将a与之进行比较
如果没有限制值或范围太大,请将b的值放入排序数据结构中。然后,您可以快速查找一个列表,而无需每次查看整个列表。在构建此查找数据结构时,您必须查找重叠的范围,并将其合并。如果(c,d)值限制在某个范围内(例如0-100),您可以计算允许值的布尔数组,并将其与简单索引查找进行比较
如果没有限制值或范围太大,请将b的值放入排序数据结构中。然后,您可以快速查找一个列表,而无需每次查看整个列表。在构建此查找数据结构时,您必须查找重叠的范围,并将其合并。如果(c,d)值限制在某个范围内(例如0-100),您可以计算允许值的布尔数组,并将其与简单索引查找进行比较
如果没有限制值或范围太大,请将b的值放入排序数据结构中。然后,您可以快速查找一个列表,而无需每次查看整个列表。在构建此查找数据结构时,您必须查找重叠的范围,并将其合并。如果(c,d)值限制在某个范围内(例如0-100),您可以计算允许值的布尔数组,并将其与简单索引查找进行比较
如果没有限制值或范围太大,请将b的值放入排序数据结构中。然后,您可以快速查找一个列表,而无需每次查看整个列表。在构建此查找数据结构时,您必须查找重叠的范围,并将其合并。是否要这样做
[c in range(k[0], k[1]+1) for c in a for k in b]
返回:
[False, False, False, False, # 1 is in any ofthe tuple range in b?
False, False, True, False, # 2 is in any of the tuple range in b?
False, False, True, False, # etc. etc....
False, False, False, False,
False, False, False, False,
False, False, False, False,
False, False, False, False] # searches for each element in a within the range specified by the tuple elements in b
[False, False, False, False, False, False, False, // is b[0] range covers 1-7?
False, False, False, False, False, False, False, // etc. etc.
False, True, True, False, False, False, False,
False, False, False, False, False, False, False]
如果要执行其他操作,如先使用b的每个元素检查a中的每个元素,然后将的顺序替换为s:
[c in range(k[0], k[1]+1) for k in b for c in a]
返回:
[False, False, False, False, # 1 is in any ofthe tuple range in b?
False, False, True, False, # 2 is in any of the tuple range in b?
False, False, True, False, # etc. etc....
False, False, False, False,
False, False, False, False,
False, False, False, False,
False, False, False, False] # searches for each element in a within the range specified by the tuple elements in b
[False, False, False, False, False, False, False, // is b[0] range covers 1-7?
False, False, False, False, False, False, False, // etc. etc.
False, True, True, False, False, False, False,
False, False, False, False, False, False, False]
我以为这是你不想要的……但我想我会把它贴给你的。你想要这个吗
[c in range(k[0], k[1]+1) for c in a for k in b]
返回:
[False, False, False, False, # 1 is in any ofthe tuple range in b?
False, False, True, False, # 2 is in any of the tuple range in b?
False, False, True, False, # etc. etc....
False, False, False, False,
False, False, False, False,
False, False, False, False,
False, False, False, False] # searches for each element in a within the range specified by the tuple elements in b
[False, False, False, False, False, False, False, // is b[0] range covers 1-7?
False, False, False, False, False, False, False, // etc. etc.
False, True, True, False, False, False, False,
False, False, False, False, False, False, False]
如果要执行其他操作,如先使用b的每个元素检查a中的每个元素,然后将的顺序替换为s:
[c in range(k[0], k[1]+1) for k in b for c in a]
返回:
[False, False, False, False, # 1 is in any ofthe tuple range in b?
False, False, True, False, # 2 is in any of the tuple range in b?
False, False, True, False, # etc. etc....
False, False, False, False,
False, False, False, False,
False, False, False, False,
False, False, False, False] # searches for each element in a within the range specified by the tuple elements in b
[False, False, False, False, False, False, False, // is b[0] range covers 1-7?
False, False, False, False, False, False, False, // etc. etc.
False, True, True, False, False, False, False,
False, False, False, False, False, False, False]
我以为这是你不想要的……但我想我会把它贴给你的。你想要这个吗
[c in range(k[0], k[1]+1) for c in a for k in b]
返回:
[False, False, False, False, # 1 is in any ofthe tuple range in b?
False, False, True, False, # 2 is in any of the tuple range in b?
False, False, True, False, # etc. etc....
False, False, False, False,
False, False, False, False,
False, False, False, False,
False, False, False, False] # searches for each element in a within the range specified by the tuple elements in b
[False, False, False, False, False, False, False, // is b[0] range covers 1-7?
False, False, False, False, False, False, False, // etc. etc.
False, True, True, False, False, False, False,
False, False, False, False, False, False, False]
如果要执行其他操作,如先使用b的每个元素检查a中的每个元素,然后将的顺序替换为s:
[c in range(k[0], k[1]+1) for k in b for c in a]
返回:
[False, False, False, False, # 1 is in any ofthe tuple range in b?
False, False, True, False, # 2 is in any of the tuple range in b?
False, False, True, False, # etc. etc....
False, False, False, False,
False, False, False, False,
False, False, False, False,
False, False, False, False] # searches for each element in a within the range specified by the tuple elements in b
[False, False, False, False, False, False, False, // is b[0] range covers 1-7?
False, False, False, False, False, False, False, // etc. etc.
False, True, True, False, False, False, False,
False, False, False, False, False, False, False]
我以为这是你不想要的……但我想我会把它贴给你的。你想要这个吗
[c in range(k[0], k[1]+1) for c in a for k in b]
返回:
[False, False, False, False, # 1 is in any ofthe tuple range in b?
False, False, True, False, # 2 is in any of the tuple range in b?
False, False, True, False, # etc. etc....
False, False, False, False,
False, False, False, False,
False, False, False, False,
False, False, False, False] # searches for each element in a within the range specified by the tuple elements in b
[False, False, False, False, False, False, False, // is b[0] range covers 1-7?
False, False, False, False, False, False, False, // etc. etc.
False, True, True, False, False, False, False,
False, False, False, False, False, False, False]
如果要执行其他操作,如先使用b的每个元素检查a中的每个元素,然后将的顺序替换为s:
[c in range(k[0], k[1]+1) for k in b for c in a]
返回:
[False, False, False, False, # 1 is in any ofthe tuple range in b?
False, False, True, False, # 2 is in any of the tuple range in b?
False, False, True, False, # etc. etc....
False, False, False, False,
False, False, False, False,
False, False, False, False,
False, False, False, False] # searches for each element in a within the range specified by the tuple elements in b
[False, False, False, False, False, False, False, // is b[0] range covers 1-7?
False, False, False, False, False, False, False, // etc. etc.
False, True, True, False, False, False, False,
False, False, False, False, False, False, False]
我想这是你不想要的……但我想我还是会把它贴给你的如果你先排序,你可以避免检查a
中的每个值和b
中的每个元组。可以丢弃已根据较低的a
值检查的元组,这将使检查速度更快
def check_value_in_ranges(a, b):
a = sorted(set(a))
b = sorted(set(b), reverse=True)
lower, upper = b.pop()
for value in a:
while value >= lower:
if value <= upper:
return True
elif not b:
return False # no tuples left to check against
lower, upper = b.pop()
return False # no values of a left to check
def检查范围(a、b)中的值:
a=已排序(集合(a))
b=已排序(设置(b),反向=真)
下部,上部=b.pop()
对于a中的值:
当值>=较低时:
如果值如果先排序,则可以避免将a
中的每个值与b
中的每个元组进行检查。可以丢弃已根据较低的a
值检查的元组,这将使检查速度更快
def check_value_in_ranges(a, b):
a = sorted(set(a))
b = sorted(set(b), reverse=True)
lower, upper = b.pop()
for value in a:
while value >= lower:
if value <= upper:
return True
elif not b:
return False # no tuples left to check against
lower, upper = b.pop()
return False # no values of a left to check
def检查范围(a、b)中的值:
a=已排序(集合(a))
b=已排序(设置(b),反向=真)
下部,上部=b.pop()
对于a中的值:
当值>=较低时:
如果值如果先排序,则可以避免将a
中的每个值与b
中的每个元组进行检查。可以丢弃已根据较低的a
值检查的元组,这将使检查速度更快
def check_value_in_ranges(a, b):
a = sorted(set(a))
b = sorted(set(b), reverse=True)
lower, upper = b.pop()
for value in a:
while value >= lower:
if value <= upper:
return True
elif not b:
return False # no tuples left to check against
lower, upper = b.pop()
return False # no values of a left to check
def检查范围(a、b)中的值:
a=已排序(集合(a))
b=已排序(设置(b),反向=真)
下部,上部=b.pop()
对于a中的值:
当值>=较低时:
如果值如果先排序,则可以避免将a
中的每个值与b
中的每个元组进行检查。可以丢弃已根据a
的较低值进行检查的元组,这将使t