Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 匹配两个部分匹配到另一个列表的字符串列表_Python_List_Match - Fatal编程技术网

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

Python 匹配两个部分匹配到另一个列表的字符串列表,python,list,match,Python,List,Match,我试图将一个包含字符串50的列表与一个包含字符串的列表进行匹配,该字符串是前一个列表5字符串中某些字符串的一部分。我将发布完整的代码,以便在下面给出上下文,但我还想给出一个简短的示例: List1 = ['abcd12', 'efgh34', 'ijkl56', 'mnop78'] List2 = ['abc', 'ijk'] 我想从列表1返回一个列表,列表2中有匹配的字符串。我试着用set.intersection做一些事情,但似乎你不能用它做部分匹配,或者用我有限的能力做不到。我也试过了

我试图将一个包含字符串50的列表与一个包含字符串的列表进行匹配,该字符串是前一个列表5字符串中某些字符串的一部分。我将发布完整的代码,以便在下面给出上下文,但我还想给出一个简短的示例:

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]]