Python 匹配两个部分匹配到另一个列表的字符串列表
我试图将一个包含字符串50的列表与一个包含字符串的列表进行匹配,该字符串是前一个列表5字符串中某些字符串的一部分。我将发布完整的代码,以便在下面给出上下文,但我还想给出一个简短的示例:Python 匹配两个部分匹配到另一个列表的字符串列表,python,list,match,Python,List,Match,我试图将一个包含字符串50的列表与一个包含字符串的列表进行匹配,该字符串是前一个列表5字符串中某些字符串的一部分。我将发布完整的代码,以便在下面给出上下文,但我还想给出一个简短的示例: List1 = ['abcd12', 'efgh34', 'ijkl56', 'mnop78'] List2 = ['abc', 'ijk'] 我想从列表1返回一个列表,列表2中有匹配的字符串。我试着用set.intersection做一些事情,但似乎你不能用它做部分匹配,或者用我有限的能力做不到。我也试过了
List1 = ['abcd12', 'efgh34', 'ijkl56', 'mnop78']
List2 = ['abc', 'ijk']
我想从列表1返回一个列表,列表2中有匹配的字符串。我试着用set.intersection做一些事情,但似乎你不能用它做部分匹配,或者用我有限的能力做不到。我也试过了,但我没有成功,使它与我的名单。在我的书中,它说我应该使用嵌套循环,但我不知道应该使用哪个函数以及如何使用列表
以下是完整的代码作为参考:
#!/usr/bin/env python3.4
# -*- coding: utf-8 -*-
import random
def generateSequences (n):
L = []
dna = ["A","G","C","T"]
for i in range(int(n)):
random_sequence=''
for i in range(50):
random_sequence+=random.choice(dna)
L.append(random_sequence)
print(L)
return L
def generatePrefixes (p, L):
S = [x[:20] for x in L]
D = []
for i in range(p):
randomPrefix = random.choice(S)
D.append(randomPrefix)
return S, D
if __name__ == "__main__":
L = generateSequences(15)
print (L)
S, D = generatePrefixes(5, L)
print (S)
print (D)
编辑:由于这是一个可能的重复标记,我想编辑这篇文章,以便说在这篇文章中使用python,另一个是R。我不知道R是否有任何相似之处,但我乍一看并不是这样。很抱歉给您带来不便。使用嵌套for循环:
def intersect(List1, List2):
# empty list for values that match
ret = []
for i in List2:
for j in List1:
if i in j:
ret.append(j)
return ret
List1 = ['abcd12', 'efgh34', 'ijkl56', 'mnop78']
List2 = ['abc', 'ijk']
print(intersect(List1, List2))
使用嵌套for循环:
def intersect(List1, List2):
# empty list for values that match
ret = []
for i in List2:
for j in List1:
if i in j:
ret.append(j)
return ret
List1 = ['abcd12', 'efgh34', 'ijkl56', 'mnop78']
List2 = ['abc', 'ijk']
print(intersect(List1, List2))
这可能不是最有效的方法,但它是有效的
matches = []
for seq_1 in List1:
for seq_2 in List2:
if seq_1 in seq_2 or seq_2 in seq_1:
matches.append(seq_1)
continue
这可能不是最有效的方法,但它是有效的
matches = []
for seq_1 in List1:
for seq_2 in List2:
if seq_1 in seq_2 or seq_2 in seq_1:
matches.append(seq_1)
continue
试一试
试一试
您可以只比较字符串,我将从包含list2项的list1结果列表中删除任何重复项。这基本上就是你想要的:
f = []
for i in list1:
for j in list2:
if j in i:
f.append(i)
result = list(set(f))
您可以只比较字符串,我将从包含list2项的list1结果列表中删除任何重复项。这基本上就是你想要的:
f = []
for i in list1:
for j in list2:
if j in i:
f.append(i)
result = list(set(f))
list1中的字符串是否要求将list2中的每个字符都视为匹配项?@StanleyR确实,这不是一个合适的复制目标。您所说的部分字符串匹配是什么意思?您对示例的预期输出是什么?@rofls是的。列表2包含的字符串是从列表1中随机选取的条目的前20个字符。列表1中有15个条目,包含50个字符,我首先从每个条目中提取前20个字符,然后随机选取其中5个,并将它们放入列表2中。现在我想从列表1中列出5个与列表2匹配的条目。我应该用嵌套循环来实现这一点,但我不知道应该使用哪种方法。嵌套for循环只是两个for循环,一个嵌套在另一个内。Juanpam、EoinS和我都在我们的示例中使用它们。列表1中的字符串是否要求将列表2中的每个字符都视为匹配项?@StanleyR确实,这不是一个合适的复制目标。字符串匹配的一部分是什么意思?您对示例的预期输出是什么?@rofls是的。列表2包含的字符串是从列表1中随机选取的条目的前20个字符。列表1中有15个条目,包含50个字符,我首先从每个条目中提取前20个字符,然后随机选取其中5个,并将它们放入列表2中。现在我想从列表1中列出5个与列表2匹配的条目。我应该用嵌套循环来实现这一点,但我不知道应该使用哪种方法。嵌套for循环只是两个for循环,一个嵌套在另一个内。Juanpam、EoinS和我都在我们的示例中使用它们。很好的一行,但实际上它比嵌套for循环afaik慢。从读者的角度来看,any比sum更清晰:[l1代表列表1中的l1,如果有的话[l2代表列表2中的l2]]是一个很好的线性语句,但它实际上比嵌套for循环慢。另外,从读者的角度来看,any比sum更清晰:[l1代表列表1中的l1,如果有的话[l1中的l2代表列表2中的l2]]