我有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 :(得分:3)
问题是你没有比较第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))
答案 1 :(得分:2)
zip(*[iter(myList)]*3)
- 这会将列表拆分为3个
[ i for i in zip(*[iter(myList)]*3) if len(set(i)) == 1 ]
输出:
[('A', 'A', 'A'), ('B', 'B', 'B'), ('C', 'C', 'C')]
获得长度
len([ i for i in zip(*[iter(myList)]*3) if len(set(i)) == 1 ])
3
答案 2 :(得分:0)
您的变量Num_Sequence
是countOccurrence(miniList)
函数内的局部变量。因此,每次调用函数时,都会再次创建变量,并且永远不会达到3。
像这样更改你的代码。
Num_Sequence = 0 # Good habit is to start your variable with lowercase, not uppercase
def countOccurrence(miniList):
global Num_Sequence # Indicating that you are going to change the global variable.
# Rest of your code.
答案 3 :(得分:0)
您的代码中存在许多问题,使其变得复杂并导致错误的结果。
首先,正如其他人所说,你不能将第三个角色与其他角色进行比较。
其次,你使用了太多的迭代和计算变量。
第三,miniList= myList [i:i + 3]
只创建一个[C,C,C,]列表。
更简单明了的实现可能如下所示:
A = 'A'
B = 'B'
C = 'C'
miniList = []
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]
for i in range(0,len(myList),3):
miniList.append(myList[i:i + 3])
print(miniList)
def countOccurrence(miniList):
Num_Sequence = 0
for item in miniList:
print(item)
if (item[0] == item[1] and item[0] == item[2]):
Num_Sequence += 1
print(item, '\n') #debugging purposes
print(Num_Sequence, '\n') #debugging purposes
return Num_Sequence
result = countOccurrence(miniList)
print(result)
我刚刚将A,B,C变量分配给字符,以便我可以处理它。我还添加了一些检查打印件。