簡體   English   中英

根據列表的數值差異比較列表的最有效方法?

[英]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.

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