我发现字符串连接似乎有少蟒蛇字节码比列表加入。
这是一个例子。
test.py:
a = ''.join(['a', 'b', 'c'])
b = 'a' + 'b' + 'c'
然后我执行python -m dis test.py
。 我得到了下面的Python字节码(Python 2.7版):
1 0 LOAD_CONST 0 ('')
3 LOAD_ATTR 0 (join)
6 LOAD_CONST 1 ('a')
9 LOAD_CONST 2 ('b')
12 LOAD_CONST 3 ('c')
15 BUILD_LIST 3
18 CALL_FUNCTION 1
21 STORE_NAME 1 (a)
3 24 LOAD_CONST 6 ('abc')
27 STORE_NAME 2 (b)
30 LOAD_CONST 4 (None)
33 RETURN_VALUE
显然,字符串连接的字节数是less.It只是负载字符串'abc'
直接。
任何人都可以解释为什么我们总是说列表加入好得多?
从Python中的有效字符串连接
Method 1
: 'A' + 'B' + 'C'
Method 6
:A = ''。加入([ '一', 'B', 'C'])
20000个整数被连接成一个字符串86KB长:
Concatenations per second Process size (kB) Method 1 3770 2424 Method 6 119,800 3000
结论:YES, str.join()
是显著更快然后典型级联( str1+str2
)。
因为
''.join(my_list)
是不是要好得多
my_list[0] + my_list[1]
和优于
my_list[0] + my_list[1] + my_list[2]
和优于
my_list[0] + my_list[1] + my_list[2] + my_list[3]
和更好的...
简而言之:
print 'better than'
print ' + '.join('my_list[{}]'.format(i) for i in xrange(x))
对于任何x
。
不要相信! 总是得到证明!
来源:我在Python源代码盯了一个小时,计算的复杂性!
我的发现。
对于2串。 (假设n为两个字符串的长度)
Concat (+) - O(n)
Join - O(n+k) effectively O(n)
Format - O(2n+k) effectively O(n)
超过2串。 (假设n是所有串的长度)
Concat (+) - O(n^2)
Join - O(n+k) effectively O(n)
Format - O(2n+k) effectively O(n)
结果:
如果你有两个字符串拼接技术(+)是更好的,但是有效的是完全一样的加入和格式。
如果有两个以上的字符串CONCAT变得糟糕,加入和格式实际上是相同的,虽然在技术上加入好一点。
摘要:
如果不关心效率使用任何上述的。 (虽然因为你问的问题我会假设你关心)
因此 -
如果你有2个字符串使用CONCAT(不用时循环!)如果你有两个以上的字符串(所有字符串)(或循环)使用联接如果您有什么不字符串使用格式,因为咄。
希望这可以帮助!