如何比较两个元素部分匹配的字符串列表

How to compare two lists of strings whose elements patially match

我有这两个列表:

list_y= ['aaa/bbb/ccc/18_12_13_y_n', 'aaa/bbb/ccc/11_14_13_y_n', 'aaa/bbb/ccc/11_12_14_y_n', 'aaa/bbb/ccc/11_12_16_y_n', 'aaa/bbb/ccc/14_12_13_y_n', 'aaa/bbb/ccc/11_17_13_y_n', 'aaa/bbb/ccc/11_12_19_y_n', 'aaa/bbb/ccc/11_12_13_y_n', 'aaa/bbb/ccc/11_12_17_y_n', 'aaa/bbb/ccc/11_12_18_y_n', 'aaa/bbb/ccc/15_12_13_y_n', 'aaa/bbb/ccc/12_12_13_y_n', 'aaa/bbb/ccc/11_16_13_y_n', 'aaa/bbb/ccc/16_12_13_y_n', 'aaa/bbb/ccc/11_12_15_y_n', 'aaa/bbb/ccc/17_12_13_y_n', 'aaa/bbb/ccc/13_12_13_y_n', 'aaa/bbb/ccc/11_13_13_y_n', 'aaa/bbb/ccc/18_12_13_y_n', 'aaa/bbb/ccc/11_15_13_y_n']

list_x= ['aaa/bbb/ccc/11_12_13_x_n', 'aaa/bbb/ccc/11_13_13_x_n', 'aaa/bbb/ccc/11_14_13_x_n', 'aaa/bbb/ccc/11_17_13_x_n', 'aaa/bbb/ccc/14_12_13_x_n', 'aaa/bbb/ccc/11_12_19_x_n', 'aaa/bbb/ccc/12_12_13_x_n', 'aaa/bbb/ccc/11_12_14_x_n', 'aaa/bbb/ccc/11_16_13_x_n', 'aaa/bbb/ccc/11_12_18_x_n', 'aaa/bbb/ccc/17_12_13_x_n', 'aaa/bbb/ccc/11_12_15_x_n', 'aaa/bbb/ccc/11_12_17_x_n', 'aaa/bbb/ccc/11_15_13_x_n', 'aaa/bbb/ccc/11_12_16_x_n', 'aaa/bbb/ccc/16_12_13_x_n', 'aaa/bbb/ccc/18_12_13_x_n', 'aaa/bbb/ccc/15_12_13_x_n', 'aaa/bbb/ccc/13_12_13_x_n', 'aaa/bbb/ccc/18_12_13_x_n']

我想比较它们是否具有相同的字符串(x 或 y 字母除外),然后我想知道 list_x 中的每个字符串是否与其在 list_y

这是我试过的:

list_a.sort()
list_b.sort()
list_a[0][0:21] == list_b[0][0:21]

这 return 是的,因为我正在比较每个字符串的前 22 个元素,这没关系,问题是这样我只对列表中的第一个字符串进行比较.如何对整个列表执行此操作?

总结一下我的疑惑:

谢谢。

我们假设列表的长度相同 (len(list_x)==len(list_y)) 并且所有排序操作都已完成...

变体 1 比较没有 21-s 符号的字符串

length_x=len(list_x)
for i in range(0,length_x):
    if list_x[i][0:21] == list_y[i][0:21] and list_x[i][22:]==list_y[i][22:]:
        print 'Strings are equal at pos: %d' % i #countdown starts from 0

变体 2 比较没有 x 和 y 符号的字符串。正则表达式在整个字符串中删除了 x 和 y

import re
length_x=len(list_x)

for i in range(0,length_x):
    if re.sub('[xy]','',list_x[i])==re.sub('[xy]','',list_y[i]):
        print 'Strings are equal at pos: %d' % i #countdown starts from 0

结果

Strings are equal at pos: 4
Strings are equal at pos: 9

使用 zip 函数和 for 循环:

for a_string, b_string in zip(list_a, list_b):
    if a_string[0:21] == b_string[0:21]:
        print("a_string anf b_string are partially identical")

这将测试两个条件并打印两个条件的结果

list_x.sort()
list_y.sort()

list_x_mod = []
list_y_mod = []

for i in list_x:
    list_x_mod.append(i[0:21])

for i in list_y:
    list_y_mod.append(i[0:21])

index = 0
while index < len(list_x_mod):
    if list_x_mod[index] in list_y_mod:
        print("Item", index, "in list_x exist in list_y")
    if list_x_mod[index] == list_y_mod[index]:
        print("Item", index, "is in same position on both list")
    index += 1

即使他们不在同一个位置,这也会测试。