[英]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.