真值
你可以使用:
from operator import eq
map(eq, str1, str2)
这将在python-3.x 中生成一个可迭代的布尔值(True 或False),并在python-2.x 中生成一个布尔值列表。如果您想要python-3.x 中的列表,您可以在map(..) 上使用list(..) 构造:
from operator import eq
list(map(eq, str1, str2))
这是有效的,因为map 将函数(此处为来自operator 包的eq 和一个或多个可迭代对象)作为第一个参数。然后它将在可迭代对象的参数上调用该函数(因此str1 和str2 的第一项,然后str1 和str2 的第二项,依此类推)。产生了该函数调用的结果。
指数
或者,我们可以使用列表推导来获取索引,例如:
same_indices = [i for i, (x, y) for enumerate(zip(str1, str2)) if x == y]
或不同的:
diff_indices = [i for i, (x, y) for enumerate(zip(str1, str2)) if x != y]
我们也可以重用上面的map结果:
from operator import eq, itemgetter
are_same = map(eq, str1, str2)
same_indices = map(itemgetter(0),
filter(itemgetter(1), enumerate(are_same))
)
如果我们然后将same_indices 转换为一个列表,我们会得到:
>>> list(same_indices)
[0, 2]
我们也可以在are_diff上执行这样的构造:
from operator import ne, itemgetter
are_diff = map(ne, str1, str2)
diff_indices = map(itemgetter(0),
filter(itemgetter(1), enumerate(are_diff))
)