我有以下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])


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

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

10-04 10:26