Python 程序查找数组中重复相邻元素的数量

问题描述 投票:0回答:5

我想编写一个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;

提前致谢---

python list count
5个回答
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

1
投票

在迭代列表时使用

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

1
投票

执行此操作的有效方法是将

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)

0
投票
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))

-1
投票
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)

© www.soinside.com 2019 - 2024. All rights reserved.