我需要一个快速函数来对两个字符串进行逐元素比较。例子:
text1 = 'absabeadg'
text2 = 'abSatyaxguz'
diff = compare(text1,text2) # should return diff=[1,1,0,1,0,0,1,0,1,0,0]
我需要一个快速函数来对两个字符串进行逐元素比较。例子:
text1 = 'absabeadg'
text2 = 'abSatyaxguz'
diff = compare(text1,text2) # should return diff=[1,1,0,1,0,0,1,0,1,0,0]
显示了零努力,但到底是什么,这是周末:
>>> text1 = 'absabeadg'
>>> text2 = 'abSatyaxguz'
>>>
>>> from itertools import izip_longest
>>>
>>> [int(c0==c1) for c0, c1 in izip_longest(text1, text2)]
[1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0]
这使用izip_longest将(可能)不同长度的序列组合在一起,int(True) == 1
以及int(False) == 0
.
[更新:]
由于关于这个输出是否有意义似乎存在一些争议,这里有一种不同的方法,它给出了相同的答案:
>>> [int(text1[i:i+1] == text2[i:i+1]) for i in range(max(len(text1), len(text2)))]
[1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0]
(据我所知,辩论似乎是关于在将无与某物进行比较时返回是否有意义0
。我认为这是完全合理的,并且是字符串切片的行为方式——我们可以将空字符串与非空字符串进行比较字符串并总是得到False == 0
。)
对于 no-import-modules-readable-solution 我猜你可以使用这个:)
text1 = "absabeadg"
text2 = "abSatyaxguz"
len1 = len(text1)
len2 = len(text2)
result = []
for index in range(min(len1, len2)):
result.append(int(text1[index] == text2[index]))
result.extend([0]*abs(len1-len2))
print result
对于列表理解的乐趣:
text2 = "absabeadg"
text1 = "abSatyaxguz"
len1 = len(text1)
len2 = len(text2)
print [int(text1[i] == text2[i]) for i in range(min(len1, len2))] + [0]*abs(len1-len2)
你可以使用 numpy/pylab:
import pylab as p
a = p.fromstring("asdfg", dtype=p.int8)
b = p.fromstring("aqwer", dtype=p.int8)
print a == b
如果字符串的长度不同,您必须自己填充结果,并且可以选择将布尔值数组转换为整数列表(如果需要)。