我不知道为什么我的代码没有计算最后两个值

zf9nrax1  于 2022-10-22  发布在  Python
关注(0)|答案(1)|浏览(190)

我正在尝试(为学校)编写一个代码,压缩并计数相同的相邻字符的数量。在这个例子中,它将是4(1)4(0)2(1)2(0)。它应该输出:4 4 2 2,但出于某种原因,它省略了最后2个。
有人知道如何解决这个问题或使我的代码更加优化吗?
我的代码:

val = "111100001100"  #the value
count1 = 0  #counts how many repeated values there are
count0 = 0
num = 0
char = val[num]
char_count = 0
length = len(val)
l1 = length - 1 

for char in range(l1):
  if val[char + 1] == val[char]:
    count1 += 1
    char_count + 1
  elif val[char + 1] != val[char]:
    x = str(count1 + 1)
    print(x)
    count1 = 0
    char_count + 1*

输出:4 4 2

kqqjbcuj

kqqjbcuj1#

你可以使用itertools.groupby
要了解它的工作原理,以下是它对val的影响:

print([(k, list(v)) for k,v in itertools.groupby(val)])

[('1', ['1', '1', '1', '1']),
 ('0', ['0', '0', '0', '0']),
 ('1', ['1', '1']),
 ('0', ['0', '0'])]

为了获得您想要的输出,我们只需要获得每个组的列表长度。

print(*[len(list(v)) for k,v in itertools.groupby(val)])

4 4 2 2

如果你想让它按你的方式来做,我做了一些小改动,让它工作。您可以添加一个额外的条件来检查它是否是列表中的最后一个元素,然后打印count1的当前值。

val = "111100001100"  #the value

count1 = 0  #counts how many repeated values there are
length = len(val) # 12

for char in range(length):
    if not char==length-1:
        if (val[char + 1] != val[char]):
            x = str(count1 + 1)
            print(x)
            count1 = 0
        elif val[char+1] == val[char]:
            count1 += 1
    else:
        x = str(count1 + 1)
        print(x)
4 4 2 2

相关问题