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 [:]检查匹配,它只需要与相应的索引匹配。请协助。
谢谢!!!
答案 0 :(得分:6)
您可以使用:
from operator import eq
map(eq, str1, str2)
这将在python-3.x中生成一个可迭代的布尔值(True
或False
),以及python-2.x中的布尔值列表。如果您需要python-3.x中的列表,可以使用list(..)
上的map(..)
构造:
from operator import eq
list(map(eq, str1, str2))
这是有效的,因为map
将第一个参数作为一个函数(此处eq
包中的operator
)和一个或多个iterables)。然后它会在iterables的参数上调用该函数(所以str1
和str2
的第一项,然后是str1
和str2
的第二项,依此类推)。该函数调用的结果已经产生。
或者,我们可以使用list comprehension来获取索引,例如:
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))
)
答案 1 :(得分:2)
你可以使用zip和list comprehension,即
[i==j for i,j in zip(str1,str2)]
[True, False, True]
答案 2 :(得分:1)
以下是使用for
循环的简单解决方案:
res = []
for i in range(len(str1)):
res.append(str1[i] == str2[i])
print(res)
输出:
[True, False, True]
也可以使用list comprehension
:
res = [ (str1[i] == str2[i]) for i in range(len(str1)) ]
编辑:获取匹配和不匹配的索引:
matched = []
non_matched = []
for i in range(len(str1)):
if str1[i] == str2[i]:
matched.append(i)
else:
non_matched.append(i)
print("matched:",matched)
print("non-matched:", non_matched)
输出:
matched: [0, 2]
non-matched: [1]
答案 3 :(得分:0)
我不确定您需要的确切输出但是,如果您想比较这两个列表并获得它们之间的差异,您可以将它们转换为set然后按如下所示减去它们:
st = str(set(str1) - set(str2))