我有一个方法,可以计算两个字符串中的差异数,并输出差异所在的位置。
def method(a):
count=0
s1="ABC"
for i in range (len(a)):
if not a[i]==s1[i]:
count=count+1
else:
count=count+0
return a,count,difference(a, s1)
在输入ex CBB上,此方法输出
('CBB', 2, [1, 0, 1])
我真正需要的是这个方法做同样的事情,但不仅要比较s1中的单个字符串,还要比较字符串列表
s1 = ['ACB', 'ABC', 'ABB']
任何有智能方法的人都可以这样做吗?
答案 0 :(得分:2)
好的,澄清之后,不要硬编码s1,而是让你的方法把它作为参数:
def method(a, s1):
count=0
for i in range (len(a)):
if not a[i]==s1[i]:
count=count+1
else:
count=count+0
return a,count,difference(a, s1)
然后使用list compherension:
result = [method(a, s1) for s1 in list]
但请注意,如果a超过s1,则方法将失败。由于你真的没有说明在这种情况下结果应该是什么,我原样保留原样。
答案 1 :(得分:1)
compare
函数计算差异的数量(以及您使用difference()
创建的差异的映射)。我重写了比较函数,将一个基本字符串与src
进行比较,这样你就不会一直与"ABC"
进行比较。
def compare(src, test):
if len(src) != len(test):
return # must be the same length
diffmap = [0]*len(src)
count = 0
for i, c in enumerate(src):
if not c == test[i]:
count = count+1
diffmap[i] = 1
return test, count, diffmap
compare_to_many
函数只需查看要与srcs
进行比较的字符串列表,并创建这些基本字符串与测试字符串test
之间的比较列表。
def compare_to_many(srcs, test):
return map(lambda x: compare(x, test), srcs)
在评论中澄清后,@ X-Pender需要对源列表进行硬编码。这可以通过以下单一功能反映出来:
def compare(test):
def compare_one(src, test):
diffmap = [0]*len(src)
count = 0
for i, c in enumerate(src):
if not c == test[i]:
count = count+1
diffmap[i] = 1
return test, count, diffmap
sources = ["ABC", "CDB", "EUA"] # this is your hardcoded list
return map(lambda x: compare_one(x, test), sources)