这两个中哪一个更优化和/或更pythonic代码? 函数返回字符串1中包含字符串2中相应位置的相同字符的位置数:
def compare(s1, s2):
count = 0
for i in s1:
if i == s2[s1.index(i)]:
count += 1
print(count)
def compare2(s1, s2):
count = 0
for i in range(0, len(s1)):
if s1[i] == s2[i]:
count += 1
print(count)
答案 0 :(得分:1)
严格来说,在性能方面,第一个 compare()是二次的,因为它在O(n)内部有一个O(n)索引()操作 - 环。第二个 compare2()要好得多,因为它使用i
进行O(1)随机访问索引。
那就是说,@ CharlesDuffy指出了需要首先解决的正确性问题。
对于函数调用开销不重要的长字符串,请考虑这个应该运行得非常快的替代方法:
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> b = 'a---e---i-----o-----u---y-'
>>> sum(map(str.__eq__, a, b))
6
在Python 2中,添加此优化以提高缓存效率:
>>> from itertools import imap # iterator version of map()
>>> sum(imap(str.__eq__, a, b))
6
答案 1 :(得分:-2)
第二个更优化,因为你没有不必要地调用函数(c1.index())。