我正在尝试将包含字符串(50 个字符串)的列表与包含属于前一个列表(5 个字符串)的某些字符串的字符串的列表进行匹配。我将发布完整的代码以便在下面提供上下文,但我也想举一个简短的例子:
List1 = ['abcd12', 'efgh34', 'ijkl56', 'mnop78']
List2 = ['abc', 'ijk']
我想返回 List1 中与 List2 匹配的字符串列表。我试图用 set.intersection 做一些事情,但似乎你不能用它做部分匹配(或者我不能以我有限的能力)。我也试过 any() 但我没有成功让它与我的列表一起工作。在我的书中它说我应该使用嵌套循环,但我不知道我应该使用哪个函数以及如何处理列表。
完整代码供引用:
#!/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))
