我想编写一个Python程序,它必须计算数组中相邻位置的重复元素。我想显示出现次数。
# Example
alist=[1,2,2,3,3,5,6] # ----- output - 4
alist=[1,2,3,4] # -------------output - 0
alist=[4,5,6,6,8,8,8,8] # -------output - 8
我试过了
alist=[1,20,4,4,4,50];
i =0;
nextele=0;
temp=0;
while(i < len(alist)):
'print(alist[i])'
temp = alist[i];
nextele =alist[i+1];\\here i am getting error out of bound when it iterates last elelment
i=i+1;
提前致谢---
因为 for 循环中有
alist[i+1]
,所以你不能遍历列表直到 end ,所以你必须在 end 之前结束它:
for i in range(len(alist)-1):
if(alist[i] == alist[i+1]):
counter+=2 # since you count both elements
alist=[1,2,2,3,3,5,6] # 4
alist=[4,5,6,6,8,8,8,8] # 8
在迭代列表时使用
for x in range(len(aList)-1)
可以防止出现 IndexError
。比较 aList[x]
和 aList[x+1]
,如果它们相同,则将计数器增加 2。
c=0
for x in range(len(aList)-1):
if aList[x]==aList[x+1]:
c+=2
执行此操作的有效方法是将
sum
与生成器表达式一起使用,该生成器表达式将 alist
与 alist[1:]
压缩,以便我们可以比较 alist
的相邻项。
data = [
[1, 2, 2, 3, 3, 5, 6],
[1, 2, 3, 4],
[4, 5, 6, 6, 8, 8, 8, 8],
[1, 20, 4, 4, 4, 50],
]
for alist in data:
a = sum(2 for u, v in zip(alist, alist[1:]) if u == v)
print(alist, a)
输出
[1, 2, 2, 3, 3, 5, 6] 4
[1, 2, 3, 4] 0
[4, 5, 6, 6, 8, 8, 8, 8] 8
[1, 20, 4, 4, 4, 50] 4
如果您确实想要重复项目的总数,可以使用列表理解(或生成器表达式)和
itertools.groupby
来查找重复组,然后使用另一个生成器表达式来对包含超过 1 个元素的组的长度求和。
from itertools import groupby
data = [
[1, 2, 2, 3, 3, 5, 6],
[1, 2, 3, 4],
[4, 5, 6, 6, 8, 8, 8, 8],
[1, 20, 4, 4, 4, 50],
]
for alist in data:
runs = [len(list(g)) for _, g in groupby(alist)]
repeats = sum(u for u in runs if u > 1)
print(alist, repeats)
输出
[1, 2, 2, 3, 3, 5, 6] 4
[1, 2, 3, 4] 0
[4, 5, 6, 6, 8, 8, 8, 8] 6
[1, 20, 4, 4, 4, 50] 3
列表理解可以与生成器表达式结合使用:
for alist in data:
repeats = sum(u for u in (len(list(g)) for _, g in groupby(alist)) if u > 1)
print(alist, repeats)
def get_count(num_list):
count=0
i=0
while(i<(len(num_list)-1)):
if(num_list[i]==num_list[i+1]):
count+=1
i+=1
return count
num_list=[1,2,2,3,4,4,4,10]
print(get_count(num_list))
lis=[0,1,1,0,1,2,2,3] #list declared
count=0 #count initialised
for i in range(len(lis)-1):
if lis[i]==lis[i+1]: #checking the value with the adjacent values
count+=1
print(count)