相关疑难解决方法(0)

如何在Python中将一个字符串附加到另一个字符串?

我想要一种有效的方法在Python中将一个字符串附加到另一个字符串.

var1 = "foo"
var2 = "bar"
var3 = var1 + var2
Run Code Online (Sandbox Code Playgroud)

有没有什么好的内置方法可供使用?

python string append

572
推荐指数
9
解决办法
154万
查看次数

Python字符串'join'比'+'更快(?),但这里有什么问题?

我在早期的帖子中询问了最有效的大规模动态字符串连接方法,我建议使用join方法,这是最好,最简单,最快速的方法(就像大家所说的那样).但是当我玩字符串连接时,我发现了一些奇怪的(?)结果.我确信事情正在发生,但我不能完全理解.这是我做的:

我定义了这些功能:

import timeit
def x():
    s=[]
    for i in range(100):
        # Other codes here...
        s.append("abcdefg"[i%7])
    return ''.join(s)

def y():
    s=''
    for i in range(100):
        # Other codes here...
        s+="abcdefg"[i%7]
    return s

def z():
    s=''
    for i in range(100):
        # Other codes here...
        s=s+"abcdefg"[i%7]
    return s

def p():
    s=[]
    for i in range(100):
        # Other codes here...
        s+="abcdefg"[i%7]
    return ''.join(s)

def q():
    s=[]
    for i in range(100):
        # Other codes here...
        s = s + ["abcdefg"[i%7]]
    return ''.join(s) …
Run Code Online (Sandbox Code Playgroud)

python string performance

31
推荐指数
3
解决办法
1万
查看次数

是什么让 python 的 itertools.groupby 如此之快?

我正在评估外观和说序列的连续术语(更多关于它的信息:https : //en.wikipedia.org/wiki/Look-and-say_sequence)。

我使用了两种方法并对它们进行计时。在第一种方法中,我只是迭代每个术语来构建下一个。在第二个中,我曾经itertools.groupby()这样做过。时差相当大,所以我做了一个图来玩:

图形

是什么让itertools.groupby()效率如此之高?两种方法的代码如下:

第一种方法:

def find_block(seq):
    block = [seq[0]]
    seq.pop(0)

    while seq and seq[0] == block[0]:
        block.append(seq[0])
        seq.pop(0)

    return block

old = list('1113222113')
new = []
version1_time = []

for i in range(40):
    start = time.time()
    while old:
        block = find_block(old)
        new.append(str(len(block)))
        new.append(block[0])
    old, new = new, []
    end = time.time()
    version1_time.append(end-start)
Run Code Online (Sandbox Code Playgroud)

方法二:

seq = '1113222113'
version2_time = []

def lookandread(seq):
    new = ''
    for value, group in itertools.groupby(seq):
        new += '{}{}'.format(len(list(group)), …
Run Code Online (Sandbox Code Playgroud)

python iteration python-itertools python-3.x

7
推荐指数
1
解决办法
421
查看次数

在循环内重复添加字符串时,为什么 f 字符串比字符串连接慢?

我正在使用 timeit 对项目的一些代码进行基准测试(使用免费的 replit,因此需要 1024MB 内存):

\n
code = \'{"type":"body","layers":[\'\n\nfor x, row in enumerate(pixels):\n    for y, pixel in enumerate(row):\n        if pixel != (0, 0, 0, 0):\n            code += f\'\'\'{{"offsetX":{-start + x * gap},"offsetY":{start - y * gap},"rot":45,"size":{size},"sides":4,"outerSides":0,"outerSize":0,"team":"{\'#%02x%02x%02x\' % (pixel[:3])}","hideBorder":1}},\'\'\'\n    \ncode += \'],"sides":1,"name":"Image"}}\n
Run Code Online (Sandbox Code Playgroud)\n

该循环针对给定图像内的每个像素运行(当然效率不高,但我还没有实现任何减少循环时间的方法),因此我可以在循环中获得的任何优化都是值得的。

\n

我记得只要你组合 3 个以上的字符串\xe2\x80\x94,f 字符串就比字符串连接更快,如图所示,我组合了超过3个字符串\xe2\x80\x94,所以我决定将循环内的 += 替换为 f 字符串并查看改进。

\n
code = \'{"type":"body","layers":[\'\n\nfor x, row in enumerate(pixels):\n    for y, pixel in enumerate(row):\n        if pixel != (0, 0, 0, 0):\n            code = f\'\'\'{code}{{"offsetX":{-start + x …
Run Code Online (Sandbox Code Playgroud)

python string loops concatenation f-string

6
推荐指数
1
解决办法
576
查看次数

python中的'in'运算符功能

我需要除去在字符string1中存在的string2。在这里string1string2只有小写字符 az 在给定的条件下,string1每次的长度都会更大。

我正在使用in运营商:

def removeChars (string1, string2):
    for char in string2:
        if char in string1:
            string1 = string1.replace(char, '')
    return string1
Run Code Online (Sandbox Code Playgroud)

但我在 Stack Overflow 上读到一个答案,上面写着:

对于 list、tuple、set、frozenset、dict 或 collections.deque 等容器类型,表达式x in y等效于any(x is e or x == e for e in y)

这意味着in操作员for在幕后使用了一个循环。

所以我的问题是,在for我的代码循环中,我应该考虑使用嵌套for循环,因为in操作员for在后台使用循环吗?如果是,这个程序的时间复杂度是多少?

python time-complexity

4
推荐指数
1
解决办法
98
查看次数