Skip to main content
 首页 » 编程设计

python之匹配两个部分匹配到另一个列表的字符串列表

2025年05月04日20JustinYoung

我正在尝试将包含字符串(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))