如何匹配包含一些匹配字符串的两个列表?

how to match two lists that contain some matching strings?

我有两个列表,例如。第一个列表在元素中包含一些额外的字符串,但我想从第二个列表中找到匹配项,无论是否将其转换为整数。

 l1 = ['1a','2','3','1b']
 l2 = ['1a','4']

输出要求:

output_requried = ['1a', '1b'] #I need all match that contains 1

尝试过:

[x for x in l1 if any(y in x for y in l2)] 
# It doesn't print "1b", but it can work with ['1','4']

如果你只想比较数字部分,你必须做一些转换。

开始于

l1 = ['1a','2','3','1b']
l2 = ['1a','4']
l2 = [int(''.join(c for c in value if c.isdigit())) for value in l2]
print(l2)

l2 现在是 [1, 4]

现在我们使用列表理解来创建我们的匹配项。我们遍历 l1 中的每个值,仅从值中取出数字(就像我们在重新定义 l2 时所做的那样),将它们转换为整数并检查它们是否在 l2 中。

match = [value for value in l1 if int(''.join(c for c in value if c.isdigit())) in l2]
print(match)

这给了我们 ['1a', '1b'].


使用函数进行转换可能有助于理解代码并确保对值的处理相同。

def get_int_value(value):
    return int(''.join(c for c in value if c.isdigit()))

l1 = ['1a','2','3','1b']
l2 = ['1a','4']
l2 = [get_int_value(value) for value in l2]
match = [value for value in l1 if get_int_value(value) in l2]
print(match)

这是一种简单的方法,因此像 "1a2b3" 这样的值可能会也可能不会按您的意愿进行处理。你没有在问题中指定这个。