Python 运行长度编码-计数是后面的一个变量

Python 运行长度编码-计数是后面的一个变量,python,Python,如果我进入laaaava,它会打印 L1 a 1 V4 a 1 什么时候该打印 L1 a 4 V1 a 1如果这不是一个学习练习,你可以这样做: uncompressed = raw_input("Enter a string: ") count = 1 uncompressed = list(uncompressed) olength = len(uncompressed) for x in range(olength): last = x-1 current = x+1

如果我进入laaaava,它会打印 L1 a 1 V4 a 1

什么时候该打印 L1 a 4 V1
a 1

如果这不是一个学习练习,你可以这样做:

uncompressed = raw_input("Enter a string: ")
count = 1
uncompressed = list(uncompressed)
olength = len(uncompressed)
for x in range(olength):
    last = x-1
    current = x+1
    if uncompressed[x] == uncompressed[last]:
        count = count + 1
    else:
        print uncompressed[x], count
        count = 1

如果这不是一个学习练习,你可以这样做:

uncompressed = raw_input("Enter a string: ")
count = 1
uncompressed = list(uncompressed)
olength = len(uncompressed)
for x in range(olength):
    last = x-1
    current = x+1
    if uncompressed[x] == uncompressed[last]:
        count = count + 1
    else:
        print uncompressed[x], count
        count = 1

如果这不是一个学习练习,你可以这样做:

uncompressed = raw_input("Enter a string: ")
count = 1
uncompressed = list(uncompressed)
olength = len(uncompressed)
for x in range(olength):
    last = x-1
    current = x+1
    if uncompressed[x] == uncompressed[last]:
        count = count + 1
    else:
        print uncompressed[x], count
        count = 1

如果这不是一个学习练习,你可以这样做:

uncompressed = raw_input("Enter a string: ")
count = 1
uncompressed = list(uncompressed)
olength = len(uncompressed)
for x in range(olength):
    last = x-1
    current = x+1
    if uncompressed[x] == uncompressed[last]:
        count = count + 1
    else:
        print uncompressed[x], count
        count = 1

要了解您的版本不起作用的原因,在循环过程中逐步了解并跟踪变量可能会有所帮助:

from itertools import groupby

text = 'laaaava'
for k, g in groupby(text):
    print k, len(list(g)),

# l 1 a 4 v 1 a 1
。。。你明白了。作为一个让它工作的提示,试着向前看而不是向后看

希望这有帮助

编辑以供评论:

我想你快到了。如果向前看,则无法在for循环中遍历整个字符串,因为在最后一次迭代中,您将越过字符串的末尾,从而导致
索引超出范围
错误

如果您改为循环到第二个到最后一个字符,因此
范围(olelength-1)
,那么在最后一次迭代中,您将检查第二个到最后一个字符是否与最后一个字符相同。如果它们相同,则增加计数;如果它们不相同,则打印并将计数重置为1,就像您在最初发布的代码中所做的那样


无论采用哪种方式,当退出循环时,您所要做的就是打印最后一个字符和计数,以便在循环退出后完成此操作。

要了解版本不起作用的原因,请在循环过程中逐步完成并跟踪变量:

from itertools import groupby

text = 'laaaava'
for k, g in groupby(text):
    print k, len(list(g)),

# l 1 a 4 v 1 a 1
。。。你明白了。作为一个让它工作的提示,试着向前看而不是向后看

希望这有帮助

编辑以供评论:

我想你快到了。如果向前看,则无法在for循环中遍历整个字符串,因为在最后一次迭代中,您将越过字符串的末尾,从而导致
索引超出范围
错误

如果您改为循环到第二个到最后一个字符,因此
范围(olelength-1)
,那么在最后一次迭代中,您将检查第二个到最后一个字符是否与最后一个字符相同。如果它们相同,则增加计数;如果它们不相同,则打印并将计数重置为1,就像您在最初发布的代码中所做的那样


无论采用哪种方式,当退出循环时,您所要做的就是打印最后一个字符和计数,以便在循环退出后完成此操作。

要了解版本不起作用的原因,请在循环过程中逐步完成并跟踪变量:

from itertools import groupby

text = 'laaaava'
for k, g in groupby(text):
    print k, len(list(g)),

# l 1 a 4 v 1 a 1
。。。你明白了。作为一个让它工作的提示,试着向前看而不是向后看

希望这有帮助

编辑以供评论:

我想你快到了。如果向前看,则无法在for循环中遍历整个字符串,因为在最后一次迭代中,您将越过字符串的末尾,从而导致
索引超出范围
错误

如果您改为循环到第二个到最后一个字符,因此
范围(olelength-1)
,那么在最后一次迭代中,您将检查第二个到最后一个字符是否与最后一个字符相同。如果它们相同,则增加计数;如果它们不相同,则打印并将计数重置为1,就像您在最初发布的代码中所做的那样


无论采用哪种方式,当退出循环时,您所要做的就是打印最后一个字符和计数,以便在循环退出后完成此操作。

要了解版本不起作用的原因,请在循环过程中逐步完成并跟踪变量:

from itertools import groupby

text = 'laaaava'
for k, g in groupby(text):
    print k, len(list(g)),

# l 1 a 4 v 1 a 1
。。。你明白了。作为一个让它工作的提示,试着向前看而不是向后看

希望这有帮助

编辑以供评论:

我想你快到了。如果向前看,则无法在for循环中遍历整个字符串,因为在最后一次迭代中,您将越过字符串的末尾,从而导致
索引超出范围
错误

如果您改为循环到第二个到最后一个字符,因此
范围(olelength-1)
,那么在最后一次迭代中,您将检查第二个到最后一个字符是否与最后一个字符相同。如果它们相同,则增加计数;如果它们不相同,则打印并将计数重置为1,就像您在最初发布的代码中所做的那样


无论哪种方式,当您退出循环时,您所要做的就是打印最后一个字符和计数,以便在循环退出后完成它。

我非常感激这一点。我确实回去接受了这个暗示。我的计数最终是正确的,直到字符串中的最后一个数字——该数字不打印,后跟“列表索引超出范围”。我试图用更多的条件来平衡这一点,但它似乎不起作用。没问题,我在末尾添加了一个编辑来尝试和帮助。您的原始代码应该非常接近工作,没有太多的更改。我非常感谢这一点。我确实回去接受了这个暗示。我的计数最终是正确的,直到字符串中的最后一个数字——该数字不打印,后跟“列表索引超出范围”。我试图用更多的条件来平衡这一点,但它似乎不起作用。没问题,我在末尾添加了一个编辑来尝试和帮助。您的原始代码应该非常接近工作,没有太多的更改。我非常感谢这一点。我确实回去接受了这个暗示。我的计数最终是正确的,直到字符串中的最后一个数字——该数字不打印,后跟“列表索引超出范围”。我试图用更多的条件来平衡这一点,但它似乎不起作用。没问题,我在末尾添加了一个编辑来尝试和帮助。您的原始代码应该非常接近工作,没有太多的更改。我非常感谢这一点。我确实回去接受了这个暗示。我的计数最终是正确的,直到字符串中的最后一个数字——该数字不打印,后跟“列表索引超出范围”。我试过了