查找数组中是否包含一个不匹配的字符串



我想说列表中有一个字符串只有一个不匹配的

def check(list, s):
n = len(list)

# If the array is empty
if (n == 0):
return False

for i in range(0, n, 1):

# If sizes are same
if (len(list[i]) != len(s)):
continue

diff = False
for j in range(0, len(list[i]), 1):
if (list[i][j] != s[j]):

# If first mismatch
if (diff == False):
diff = True

# Second mismatch
else:
diff = False
break

if (diff):
return True

return False

这段代码还可以,但运行缓慢。我怎样才能用字典使它更快?

您可以使用zip((将两个字符串中的每个字符配对,并使用sum((计算不匹配的数量。any((函数将允许您检查列表中每个项目的匹配情况:

def check(sList,string):
return any(len(string)==len(s) and sum(a!=b for a,b in zip(s,string))==1 
for s in sList)
check(["abcd","cdef","efgh"],"xfgh") # True
check(["abcd","cdef","efgh"],"abdc") # False

这转化为以下基本的循环:

def check(sList,string):
for s in sList:
if len(string) !=len(s): continue
if sum(a!=b for a,b in zip(s,string)) == 1:
return True
return False

[EDIT]为了更快地进行比较,字符串比较可以使用zip((作为迭代器,这样比较就不需要进行到每个字符串的末尾:

def check(sList,string):
for s in sList:
if len(string) !=len(s): continue
mismatch = (a!=b for a,b in zip(s,string))  # non-matching iterator
if not any(mismatch): continue              # at least one
if any(mismatch): continue                  # no more after that
return True
return False

最新更新