从列表中查找整数模式

时间:2015-11-26 00:30:28

标签: python list python-3.x

我有一个数字列表,例如:

list= [1, 2, 4, 1, 2, 4, 1, 2, 4]

你可以看到1,2,4

的明显重复模式

我试图找到一种方法来查看该列表以确定周期及其长度。我的课程每次都会有不同的数字。所以例如,我给出的列表,我希望它输出3,这是模式的长度。

我尝试将这些项目进行比较,但最终无法找到一种有效的方法,而不必每次都退出列表索引,因为我只是在查找序列中重复的数字时。问题是模式可能是2 2 1,在这种情况下,我会输出2作为模式长度,当它实际上是3.

很抱歉由于缺乏信息,我对如何执行此操作感到很遗憾,因此我没有太多示例代码可供展示。

2 个答案:

答案 0 :(得分:1)

您可以使用生成器功能将列表拆分为块。

>>> def gen(lst, pat):
...     size = len(pat)
...     size_l = len(lst)
...     for i in range(0, size_l, size):
...         yield lst[i:i+size]
... 
>>> lst = [1, 2, 4, 1, 2, 4, 1, 2, 4]
>>> pat = [1, 2, 4]
>>> len(list(gen(lst, pat)))
3

也不要使用“list”作为变量的名称,它会影响内置的list

答案 1 :(得分:0)

这个怎么样?

def find_sub(lst):
    return next(sub for sub in range(len(lst), 0, -1)
                    if lst == mylist[:sub] * (len(lst) / sub))

find_sub([1, 2, 4, 1, 2, 4, 1, 2, 4]) # returns 3
find_sub([1, 2, 1, 2, 1, 2, 1, 2]) # returns 2
find_sub([1, 1, 1]) # returns 1
find_sub([1, 2, 3]) # returns 3
find_sub([1, 2, 3, 1, 2, 3, 1]) # returns 7