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