当前位置: 首页 > 面试题库 >

php的python的strtr

别旻
2023-03-14
问题内容

php具有以下strtr 功能:

strtr('aa-bb-cc', array('aa' => 'bbz', 'bb' => 'x', 'cc' => 'y'));
# bbz-x-y

它用相应的值替换字符串中的字典键,并且(重要)不替换已经替换的字符串。天真地尝试在python中编写相同的代码:

def strtr(strng, replace):
    for s, r in replace.items():
        strng = strng.replace(s, r)
    return strng

strtr('aa-bb-cc', {'aa': 'bbz', 'bb': 'x', 'cc': 'y'})

返回xz-x-y不是我们想要的(bb再次被替换)。如何更改上述功能,使其行为类似于其php对应项?

(如果可能,我希望没有正则表达式的答案)。

Upd:这里有一些很好的答案。我对它们进行了计时,发现对于短弦琴,Gumbo的版本似乎是最快的,而在长弦琴上,胜者是re解决方案

# 'aa-bb-cc'
0.0258 strtr_thg
0.0274 strtr_gumbo
0.0447 strtr_kojiro
0.0701 strtr_aix

# 'aa-bb-cc'*10
0.1474 strtr_aix
0.2261 strtr_thg
0.2366 strtr_gumbo
0.3226 strtr_kojiro

我自己的版本(对Gumbo进行了稍微优化):

def strtr(strng, replace):
    buf, i = [], 0
    while i < len(strng):
        for s, r in replace.items():
            if strng[i:len(s)+i] == s:
                buf.append(r)
                i += len(s)
                break
        else:
            buf.append(strng[i])
            i += 1
    return ''.join(buf)

完整的代码和时间安排:https://gist.github.com/2889181


问题答案:

这是一个幼稚的算法

使用索引逐字符遍历原始字符串,并为每个索引检查搜索字符串之一是否等于当前索引之后的字符串。如果找到匹配项,则将替换项推入缓冲区,然后按匹配字符串的长度进行索引。如果找不到匹配项,则将索引继续加1。最后,将缓冲区中的字符串连接为单个字符串。

def strtr(strng, replace):
    buffer = []
    i, n = 0, len(strng)
    while i < n:
        match = False
        for s, r in replace.items():
            if strng[i:len(s)+i] == s:
                buffer.append(r)
                i = i + len(s)
                match = True
                break
        if not match:
            buffer.append(strng[i])
            i = i + 1
    return ''.join(buffer)


 类似资料:
  • 问题内容: 我使用了 python -m SimpleHTTPServer ,但是PHP文件不会执行,而是直接下载了。 问题答案: Python Web服务器将您的PHP文件发送给浏览器的原因很可能是因为未配置它或无法处理PHP文件。参见https://serverfault.com/questions/338394/how- to-run-php-with- simplehttpserver P

  • 问题内容: 我已经找到了以下问题,但我想知道是否有一种更快,更脏的方法来估算不依赖外部库的python解释器当前正在使用多少内存。 我来自PHP,过去经常为此目的使用memory_get_usage()和memory_get_peak_usage(),我希望能找到一个等效的对象。 问题答案: 以下代码为Linux和其他系统提供了一个简单的解决方案,我在我的项目中使用了以下代码: 它返回当前和峰值驻

  • 问题内容: 我在php中将以下语句转换为。 我需要在另一个程序中做同样的事情吗? 有任何想法吗 ? 干杯, 问题答案: 该模块具有,它可以满足您的需求。

  • 问题内容: 我正在尝试为某些python脚本构建Web界面。问题是我必须使用PHP(而不是CGI),并且我执行的某些脚本需要花费一些时间才能完成:5-10分钟。PHP是否可以与脚本进行通信并显示某种进度状态?这应该允许用户在任务运行时使用网页,并在此期间显示某些状态,或者在完成时仅显示一条消息。 当前使用exec()并在完成时处理输出。该服务器正在Windows计算机上运行,​​因此pcntl_f

  • 问题内容: 我发现compact()和extract()是PHP中的函数,非常方便。compact()在符号表中获取名称列表,并仅使用其值创建哈希表。提取相反。例如, 有没有办法在Python中做同样的事情?我环顾四周,最接近的就是这个线程,似乎对此不满意。 我知道locals(),globals()和vars(),但是如何方便地选择它们的一部分值呢? Python是否有更好的东西可以消除对此的需

  • 其中test.py为: 我为python、geckdodriver和firefox授予了整个lib目录的权限,以便在IIS_IUSRS(使用Windows)下进行完全控制。 Geckodriver的日志: 产生错误: 文件“C:\inetpub\wwwroot\jobdescription\test.py”,第13行,在driver=webdriver.firefox(firefox_option