[英]How to find specific pattern in a Python list?
我有一個僅包含True
和False
值的列表。 當列表的元素從True
變為False
或反之亦然超過 3 次時,我正在尋找一種模式。
示例(T 用於True
,F 用於False
的縮寫):
List = [T, T, T, F, F, F, T, F, T, F, T, T, T, T]
我要檢測的是: [F, T, F, T, F, T]
及其在原始列表中的起始索引。
請注意,模式不是固定的。 它可以是[F, T, F, T, F, T]
或[T, F, T, F, T]
。
如果您有任何想法可以有效地完成此任務,請告訴我。
事實上,我需要實時完成這種檢測。 我的意思是, List
是通過從另一個來源獲取數據(時間戳為 0.5 秒)來制作的。 我需要在List
中檢測上述模式。 如果您知道如何解決此問題(無論是否實時),請告訴我。
好吧,您可以將每個列表變成一個字符串:
newlist=['T' if x is True else 'F' for x in mylist]
newstring=''.join(newlist)
然后找到與“FTFTFT”匹配的 position,如該問題的已接受答案中所述。
該問題類似於查找總和為 0 的最大長度子數組,並且可以以類似的方式進行處理:
T = True
F = False
List = [T, T, T, F, F, F, T, F, T, F, T, T, T, T]
def max_toggle_subarray(arr):
start = 0
max_len = 0
for indexI, i in enumerate(arr):
length = 0
for indexJ, j in enumerate(arr[indexI:-1]):
curr = j
length += 1
predict = False if curr else True # Toggle and predict next
if predict == arr[indexI + indexJ + 1]:
if length >= max_len:
max_len = length
if indexJ == 0: start = max(start, indexI + indexJ) # We dont update start index on every iteration
end = indexI + indexJ + 1
else:
break
return start, end
# test array
print("Length of the longest subarray is starting at % d until % d" % max_toggle_subarray(List))
有可能使用類似於找到最大和連續子數組的方法將時間復雜度降低到 O(n)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.