如何匹配包含一些匹配字符串的两个列表?
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"
这样的值可能会也可能不会按您的意愿进行处理。你没有在问题中指定这个。
我有两个列表,例如。第一个列表在元素中包含一些额外的字符串,但我想从第二个列表中找到匹配项,无论是否将其转换为整数。
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"
这样的值可能会也可能不会按您的意愿进行处理。你没有在问题中指定这个。