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



我有两个列表:

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]

这返回True,因为我正在比较每个字符串的前22个元素,这很好,问题是,以这种方式,我只对列表中的第一个字符串进行比较。如何对整个列表进行处理?

总结我的疑虑:

  • 如何比较两个部分匹配的字符串列表
  • 我使用list_a[0][0:21]==list_b[0][0:22]来比较字符串的前22个元素,但有没有办法"排除"x和y并比较整个字符串

谢谢。

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

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

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

我们假设列表的长度相同(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")

最新更新