从lis中寻找整数模式

2024-04-29 16:48:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

你可以看到明显的重复模式1,2,4

我想找到一种方法,通过这个列表来确定周期和长度。在我的节目里,每次的数字都不一样。例如,我给出的列表,我希望它输出3,这是模式的长度。在

我试着把这些项目进行比较,但最终还是无法找到一种有效的方法,因为我只是在寻找序列中重复出现的数字。问题是模式可能类似于221,在这种情况下,我会输出2作为模式长度,而实际上它是3。在

很抱歉,缺乏信息,我不知道如何做到这一点,所以我没有太多的示例代码来显示。在


Tags: 项目方法代码信息示例列表模式情况
2条回答

可以使用生成器函数将列表拆分为块。在

>>> 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

这个怎么样?在

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

相关问题 更多 >