我有一个包含 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))
