为了账号安全,请及时绑定邮箱和手机立即绑定

我正在尝试编写一个字母重复计数功能,但它不起作用

我正在尝试编写一个字母重复计数功能,但它不起作用

茅侃侃 2021-06-02 13:57:06
要记录时间,您可以使用time命令 (Unix)。例如,如果我运行这个程序:iterations = 0while True:        // do something        iterations+=1        print iterations 使用以下命令调用脚本:时间 python myscript.py之后,假设您使用Cntr+C或任何其他强制停止来停止执行。您现在可以通过检查输出来检查运行脚本的时间以及获得的迭代次数,在我的情况下为:777377747775Traceback (most recent call last):  File "script.py", line 5, in <module>    print counterKeyboardInterruptreal    0m2.447suser    0m0.109ssys     0m0.234s请注意,您可以在time命令的文档中找到从中获得的三个时间值的含义
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

如果我正确地回答了您的问题,那么您正在尝试对字符串中的每个字符进行计数并将结果存储在列表中。蛮力的做法是使用字典来跟踪字符和它出现的次数。这是代码:


 st= "kkikkd"

 l=[]

 temp=1

 for i in range(1,len(st)):

    if st[i-1] == st[i]:

        temp += 1

    else:

        l.append([st[i-1],temp])

        temp= 1

if st[i] == st[i-1]:

    temp += 1

l.append([st[i],temp])

输出: [['k', 2], ['i', 1], ['k', 2], ['d', 1]]


查看完整回答
反对 回复 2021-06-06
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

您可以使用 itertools.groupby


>>> from itertools import groupby

>>> s = 'kkikkd' 

>>> [[k, len(list(v))] for k,v in groupby(s)]

[['k', 2], ['i', 1], ['k', 2], ['d', 1]]

或者,您也可以使用它re.findall来执行此操作


>>> import re

>>> [[k, len(v)] for v,k in re.findall(r'((.)\2*)', s)]

[['k', 2], ['i', 1], ['k', 2], ['d', 1]]


查看完整回答
反对 回复 2021-06-06
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

首先,您的代码中有两个问题


def chnum(xtrr):

    lis2 = []

    for n in xtrr:

        if lis2[0][0] == n:  # lis2 is empty. It does not have 0th element, much less another nested list.

        # this will only check if n is in the first element of lis2, what about all the other elements?

            continue

        lis1=[n]

        i = 0

        for m in xtrr:

            if n== m:

                i+=1

        lis1 += [i]

        lis2 += [lis1]

     return lis2

print(chnum('kkidduus'))

但是我建议不要修复它,而是建议使用 python 的强大功能。特别是它的字典像这样:


def chnum(xtrr):

    d = {n:0 for n in xtrr}  # create a dict where keys are letters from input string

    for n in xtrr:

        d[n] += 1

        # for each letter from input increment the dict's value for that letter

    return d


print(chnum('kkidduus'))

您将看到这段代码更加简洁和易读。如果您真的坚持要以嵌套列表的形式获得结果,那么这本词典也是一个很好的起点。l = [list(t) for t in chnum('kkidduus').items()]事后做


编辑:OP希望在每次重复字母时查看计数,因此可以修改上面的代码以适应


def chnum(xtrr):

    d = {n:0 for n in xtrr}  # create a dict where keys are letters from input string

    for n in xtrr:

        d[n] += 1

        # for each letter from input increment the dict's value for that letter

    l = [[n, d[n]] for n in xtrr]

    return l


print(chnum('kkidduus'))

使用字典在这里仍然有好处,因为 dict 键是散列的,因此在计算字母出现时具有速度优势


查看完整回答
反对 回复 2021-06-06
  • 3 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号