当前位置: 首页 > 知识库问答 >
问题:

优化python中的MasterMind代码和字符串操作

姜天宇
2023-03-14

我正在为MasterMind写一个求解器,其中我必须接受一个猜测和一个答案,并返回一些黑白钉子的数量表示,其中一个黑色钉子代表正确点的正确颜色,一个白色钉子代表不正确点的正确颜色。我必须运行这段代码大约200万次迭代,所以它需要尽可能快。目前最大的时间下沉是拆分和索引调用,但我不知道如何删除它们。关于如何在保持其功能的同时使代码运行得更快,有什么想法吗?

def returnPegs(guess, answer):
        guessList = guess.split(" ")
        answerList = answer.split(" ")
        response = ""
        iterator = [0,1,2,3]
        for i in iterator:
            if answerList[i] == guessList[i]:
                response = response + "B"
                guessList[i] = "alsoNotAColor"
                answerList[i] = "notAColor"
        for j in iterator:
            if guessList[j] in answerList:
                response = response + "W"
                answerList[answerList.index(guessList[j])] = "notAColor"
                guessList[j] = "alsoNotAColor"
        return response

以确保清晰度。我的输入是用空格分隔的四种颜色的字符串,我的输出不必有任何特定的形式,只要它对每一个黑白钉子的组合都是唯一的。

经过大量优化后,这是代码的当前状态:

 def returnPegs(guess, answer):
    pegs = 0 
    for answerPeg, guessPeg in zip(answer, guess):
        if answerPeg == guessPeg:
            pegs += 5
        elif guessPeg in answer:
            pegs +=1
    return pegs

进一步优化,有点回到一些原始代码,这个版本实际上是所有版本中最快的。大约是第一个的4倍,第二个的2倍。

def returnPegs(guess, answer):
    response = 0
    iterator = [0,1,2,3]
    for i in iterator:
        if guess[i] == answer[i]:
            response += 5
            guess[i] = "alsoNotAColor"
            answer[i] = "notAColor"
        elif guess[i] in answer:
            response += 1
            answer[answer.index(guess[i])] = "notAColor"
            guess[i] = "alsoNotAColor"
    return response

共有1个答案

孔深
2023-03-14

如果我没看错你的问题,这段代码应该可以满足你的需要:

def returnPegs(guess, answer):
    guesses = guess.split()
    answers = answer.split()

    pegs = []

    for answer, guess in zip(answers, guesses):
        if answer == guess:
            pegs.append('B')
        elif guess in answers:
            pegs.append('W')

    return ''.join(pegs)

zip()将两个序列压缩在一起:

>>> a = [1, 2, 3, 4]
>>> b = [5, 6, 7, 8]
>>> zip(a, b)
[(1, 5), (2, 6), (3, 7), (4, 8)]
 类似资料:
  • 18.6. 优化字符串操作 Soundex 算法的最后一步是对短结果补零和截短长结果。最佳的做法是什么? 这是目前在 soundex/stage2/soundex2c.py 中的做法: digits3 = re.sub('9', '', digits2) while len(digits3) < 4: digits3 += "0" return digit

  • 我们知道,在JDK8及以下版本中,使用加号表示连接的字符串将被编译到StringBuilder中进行性能优化,但在JDK9之后,它将使用<code>java.lang.invoke实现。StringConcatFactory#makeConcatWithConstants方法。 但是,在反编译< code>java.lang.Object之后,可以看到其< code>toString方法仍然是使用

  • 问题内容: 因此,最近我一直在制作python脚本,用于从大型文本文件(> 1 GB)中提取数据。问题基本上可以归结为从文件中选择文本行,然后从某个数组中搜索字符串以查找字符串(此数组中可以包含多达1000个字符串)。这里的问题是我必须找到该字符串的特定出现,并且该字符串在该文件中可能出现无数次。同样,需要一些解码和编码,这另外会降低脚本速度。代码看起来像这样: 我的问题是:有没有办法对此进行优化

  • 本文向大家介绍Python中的字符串操作和编码Unicode详解,包括了Python中的字符串操作和编码Unicode详解的使用技巧和注意事项,需要的朋友参考一下 本文主要给大家介绍了关于 Python中的字符串操作和编码Unicode的一些知识,下面话不多说,需要的朋友们下面来一起学习吧。 字符串类型 str:Unicode字符串。采用''或者r''构造的字符串均为str,单引号可以用双引号或者

  • 本文向大家介绍Python中字符串与编码示例代码,包括了Python中字符串与编码示例代码的使用技巧和注意事项,需要的朋友参考一下 在最新的Python 3版本中,字符串是以Unicode编码的,即Python的字符串支持多语言 编码和解码    字符串在内存中以Unicode表示,在操作字符串时,经常需要str和bytes互相转换    如果在网络上传输或保存到磁盘上,则从内存读到的数据就是st

  • 问题内容: 我正在使用pygame和box2d编写游戏引擎,并且在角色生成器中,我希望能够编写将在按键事件中执行的代码。 我的计划是在字符生成器中有一个文本编辑器,使您可以编写类似于以下内容的代码: 我将以字符串的形式检索文本编辑器的内容,并且我希望代码在此Character方法的方法中运行: 最好的方法是什么? 问题答案: 您可以使用该方法来执行此操作。 定义 该代码只是标准的Python代码-