[英]Most efficient way to compare lists based on their numerical differences?
我正在处理仅包含数值数据的列表,并且希望将它们之间的数值差异进行比较:
primary_seq = [0, 2, 4, 5, 7, 8, 10]
...Code code code
primary_pattern = 2^2^1^2^1^2
sub_seq = [0, 2, 3, 5, 6]
...Code code code
sub_pattern = 2^1^2^1
鉴于此,我希望程序将sub_pattern与primary_pattern进行比较:
>>> primary_pattern >= sub_pattern
>>> True
所以基本上
221212 <--- Above seq.
2121 <--- This is a section of the above seq.
您可以创建一个类来计算模式1 ^ 2 ^ 1 ^ 2并定义> =的含义(这似乎是字符串的in)。
class pattern:
pattern=''
def __init__(self,lst):
pat=str([lst[i+1]-lst[i] for i in range(len(lst)-1)])[1:-1]
self.pattern=pat.replace(', ','^')
def __repr__(self): return self.pattern
def __ge__(self,other): return (other.pattern in self.pattern)
>>>primary_pattern =pattern(primary_seq)
>>>sub_pattern = pattern(sub_seq)
>>>sub_pattern
2^1^2^1
>>>primary_pattern >= sub_pattern
True
假设您的意思是一个列表中的差异之和大于另一个列表中的> =,那么您可以将列表本身拉大并求和...
>>> primary_pattern = [abs(a-b) for a,b in zip(primary_seq[1:], primary_seq[:-1])]
>>> sub_pattern = [abs(a-b) for a,b in zip(sub_seq[1:], sub_seq[:-1])]
>>> sum(primary_pattern[1:-1]) >= sum(sub_pattern)
True
注意:如果序列是严格排序的,则不需要abs()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.