繁体   English   中英

如何在 Python 中对字符串中的连续字母进行分组?

[英]How to group consecutive letters in a string in Python?

例如:string = aaaacccc,那么我需要 output 为 4a4c。 有没有办法在不使用任何高级方法(例如库或函数)的情况下做到这一点?

此外,如果有人知道如何做相反的事情:将“4a4c: 变成 aaaacccc,那就太好了。

这将在一次迭代中完成工作

保留两个临时变量,一个用于当前字符,另一个用于该字符的计数,一个用于结果变量。

只需遍历字符串并继续增加计数,如果它与前一个匹配。

如果没有,则使用字符的计数和值更新结果并更新字符和计数。

最后将最后一个字符和计数添加到结果中。 完毕!

input_str = "aaaacccc"
if input_str.isalpha():
  current_str = input_str[0]
  count = 0
  final_string = ""
  for i in input_str:
    if i==current_str:
      count+=1
    else:
      final_string+=str(count)+current_str
      current_str = i
      count = 1
  final_string+=str(count)+current_str

  print (final_string)

另一个解决方案,我甚至包括您在帖子中提到的拼凑反向操作。 两者都在 O(n) 中运行并且相当容易理解。 编码与 Akanasha 发布的基本相同,在我编写 decode() 时,他发布答案的速度稍快一些。

def encode(x):
    if not x.isalpha():
        raise ValueError()
    output = ""
    current_l = x[0]
    counter = 0
    for pos in x:
        if current_l != pos:
            output += str(counter) + current_l
            counter = 1
            current_l = pos
        else:
            counter += 1

    return output + str(counter) + current_l


def decode(x):
    output = ""
    i = 0
    while i < len(x):
        if x[i].isnumeric():
            n = i + 1
            while x[n].isnumeric():
                n += 1
            output += int(x[i:n])*x[n]
            i = n
        i += 1
    return output


test = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasasggggggbbbbdd"
test1 = encode(test)
print(test1)

test2 = decode(test1)
print(test2)

print(test == test2)

是的,您不需要任何库:

list1 = list("aaaacccc")
letters = []
for i in list1:
    if i not in letters:
        letters.append(i)
string = ""
for i in letters:
    string += str(list1.count(i))
    string+=str(i)
print(string)

基本上,它遍历列表,找到唯一的字母,然后用字母本身打印计数。 反转将是相同的 function,只需打印金额。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM