str1 = ['106.51.107.185', '122.169.20.139', '123.201.53.226']
str2 = ['106.51.107.185', '122.169.20.138', '123.201.53.226']
我需要根据它们各自的索引来匹配上面的字符串。
str1[0] 匹配 str2[0]
str1[1] 匹配 str2[1]
str1[2] 匹配 str2[2]
基于匹配我需要输出。
我从头开始尝试,在 2 个字符串之间,str[0] 正在检查与 str2[:] 的匹配,它只需要与各自的索引单独匹配。请协助。
谢谢!!!
请您参考如下方法:
真值
您可以使用:
from operator import eq
map(eq, str1, str2)
这将在 python-3.x 中生成 bool 值的迭代(True 或 False) ,以及 python-2.x 中的 bool 值列表.如果您想要 python-3.x 中的列表,您可以在 map(..) 上使用 list(..) 构造:
from operator import eq
<b>list(</b>map(eq, str1, str2)<b>)</b>
这是可行的,因为 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 <b>ne</b>, itemgetter
are_<b>diff</b> = map(<b>ne</b>, str1, str2)
<b>diff</b>_indices = map(itemgetter(0),
filter(itemgetter(1), enumerate(are_<b>diff</b>))
)
