Skip to main content
 首页 » 编程设计

python之计算切片列表中的连续出现

2025年05月04日20over140

我有一个包含 81 项的列表,如下所示

myList = [A, A, A, A, A, B, A, A, C, A, B, A, A, B, B, A, B, C, A, C, A, A, C, B, A, C, C, B, A, A, B, A, B, B, A, C, B, B, A, B, B, B, B, B, C, B, C, A, B, C, B, B, C, C, C, A, A, C, A, B, C, A, C, C, B, A, C, B, B, C, B, C, C, C, A, C, C, B, C, C, C] 

我已经将 myList 切片为每个列表 3 个元素

 for i in range(0,len(myList ),3): 
     miniList= myList [i:i + 3] 

所以 miniList 现在将是

[A,A,A] consecutive Occurrence 
[A,A,B] 
[A,A,C]  
. 
. 
. 
[C,C,C] consecutive Occurrence 

然后我写了一个函数叫做

def countOccurrence(miniList): 
    count = 1  
    Num_Sequence = 0  
    for i in range(len(miniList)-1): 
        if miniList[i] == miniList[i+1]: 
            count +=1 
            if(count == 3): 
                Num_Sequence += 1 
                print(miniList) #debugging purposes 
                print(Num_Sequence) #debugging purposes 
 
    return Num_Sequence 

Num_Sequence 应该返回 3 而不是 1。谁能告诉我我的代码有什么问题吗?

请您参考如下方法:

问题是您没有比较第 0 个和第 2 个元素,即您只比较当前检查的下一个元素 - 这意味着永远不会有第三个匹配项。

相反,我建议您尝试这个 - 它完全跳过了循环:

def countOccurrence(miniList): 
    count = 1 
    Num_Sequence = 0 
 
    if miniList.count(miniList[0]) == 3: 
        Num_Sequence = 3 
        return Num_Sequence 
 
    return Num_Sequence 

此程序所做的是检查 miniList 中的第一个元素是否出现 3 次。由于 miniList 的大小为 3,如果所有元素都相等,则出现 3 的唯一方式,因此使用哪个进行比较并不重要。

我按如下方式运行:

for i in range(0,len(myList ),3): 
    miniList= myList [i:i + 3] 
    print countOccurrence(miniList) 

并如预期的那样在最后得到了 3。

这是您实际希望 miniList 成为 3 个元素子列表的列表的情况的解决方案:

miniList = []; 
for i in range(0,len(myList ),3): 
    miniList.append(myList [i:i + 3]) 

这会将每个子列表附加到 miniList。 countOccurence 仍然有效。您可以应用相同的 append 逻辑来获取 miniList 的每个元素的计数:

out = []; 
for elem in miniList: 
    out.append(countOccurrence(elem))