Python String与各自的索引匹配

时间:2018-01-06 16:02:50

标签: python

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 [:]检查匹配,它只需要与相应的索引匹配。请协助。

谢谢!!!

4 个答案:

答案 0 :(得分:6)

真值

您可以使用:

from operator import eq

map(eq, str1, str2)

这将在中生成一个可迭代的布尔值(TrueFalse),以及中的布尔值列表。如果您需要中的列表,可以使用list(..)上的map(..)构造:

from operator import eq

list(map(eq, str1, str2))

这是有效的,因为map将第一个参数作为一个函数(此处eq包中的operator)和一个或多个iterables)。然后它会在iterables的参数上调用该函数(所以str1str2的第一项,然后是str1str2的第二项,依此类推)。该函数调用的结果已经产生。

指数

或者,我们可以使用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))