在Python上使用字符串。找不到

2024-06-25 05:34:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在输入中,我们得到了字符串

asdfssgAAatG

输出必须是一个压缩字符串,并带有字母计数。例如输入

aabggtttf

必须给予

a2b1g2t3f1

所以字母和它在输出行中重复了多少次。输入

abc

必须给予

a1b1c1

在输出中。所以我写了一些代码:

a=str(input())+' '
count=1
b=1
r=''
for i in range (a.count('')-2):
  if a[i]==a[i+1]:
        b+=1
  else:
        count=b
        b=1
        r=r+a[i]+str(count)
if a!=' ':
    print(result=r[0:-1]+str(count))

对我来说,代码工作完美,当我把测试输入它给出正确的答案。但在我需要插入密码的地方steptic.org网站“有些自动测试会出错,我无法完成这项任务。所以这里的问题是:这段代码有什么问题,什么输入会产生错误?也许这里有更简单的方法在Python上执行这个任务? 我英语不好的原因是:) 另外,测试内容我看不到,我试了一些测试数据-所有的工作。。,似乎我就是想不出什么数据给出了错误的答案。你知道吗


Tags: 字符串答案代码inputifcount错误字母
2条回答

目前还不清楚哪些测试失败了,以什么方式失败了,所以我不能对此发表评论。你知道吗

但是,您可以使用itertools.groupby()来实现所需的结果:

In [13]: s = 'aabggtttf'

In [14]: ''.join(('%s%d' % (l, sum(1 for _ in g))) for l, g in itertools.groupby(s))
Out[14]: 'a2b1g2t3f1'

此处:

  • for l, g in itertools.groupby(s)迭代相同字母的序列
  • '%s%d' % (l, sum(1 for _ in g)))生成一个由字母和运行长度组成的字符串。你知道吗

如果您不担心字母的大小写:使用collections.Counter

>>> from collections import Counter
>>> my_string = 'asdfssgAAatG'
>>> "".join(sorted([x+str(y) for x,y in Counter(my_string).items()],key=lambda x:my_string.index(x[0])))
'a2s3d1f1g1A2t1G1'

创建函数并返回它:

>>> def count_it(my_string):
...     return "".join(sorted([x+str(y) for x,y in Counter(my_string).items()],key=lambda x:my_string.index(x[0])))
... 
>>> count_it('aabggtttf')
'a2b1g2t3f1'
>>> count_it('abc')
'a1b1c1'

使用itertools.groupby

>>> "".join([ x+str(len(list(y))) for x,y in itertools.groupby('aabggtttf')])
'a2b1g2t3f1'

相关问题 更多 >