如何比较两个元素部分匹配的字符串列表
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 个元素,这没关系,问题是这样我只对列表中的第一个字符串进行比较.如何对整个列表执行此操作?
总结一下我的疑惑:
- 如何比较两个仅部分匹配的字符串列表?
- 我使用list_a[0][0:21] == list_b[0][0:21]来比较字符串的前22个元素,但是有没有'exclude' x 和 y 并比较整个字符串的方法?
谢谢。
我们假设列表的长度相同 (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
即使他们不在同一个位置,这也会测试。
我有这两个列表:
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 个元素,这没关系,问题是这样我只对列表中的第一个字符串进行比较.如何对整个列表执行此操作?
总结一下我的疑惑:
- 如何比较两个仅部分匹配的字符串列表?
- 我使用list_a[0][0:21] == list_b[0][0:21]来比较字符串的前22个元素,但是有没有'exclude' x 和 y 并比较整个字符串的方法?
谢谢。
我们假设列表的长度相同 (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
即使他们不在同一个位置,这也会测试。