Skip to main content
 首页 » 编程设计

Python 字符串与相应索引匹配

2025年05月04日21wayfarer

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) 

这将在 中生成 bool 值的迭代(True 或 False) ,以及 中的 bool 值列表.如果您想要 中的列表,您可以在 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>)) 
                  )