基于python中的另一个字符串从列表中提取字符串

2024-05-16 18:04:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含如下整数的列表(不按顺序排列):

list1 = [2,1,3]

我还有第二张这样的单子:

list2 = ['Contig_1_Length_1000','Contig_2_Length_500','Contig_3_Length_400','Contig_4_Length_300','Contig_5_Length_200','Contig_6_Length_100']

这些列表来自fasta文件。清单2总是以“Contigè”开头,但可能并不总是按照良好的顺序排列。我想返回如下列表:

list3 = ['Contig_1_Length_1000','Contig_2_Length_500','Contig_3_Length_400']

list3包含的contigs的编号只出现在list1中。你知道吗

如何在python中实现这一点?你知道吗

非常感谢!你知道吗


Tags: 文件列表整数length编号fasta单子contig
3条回答

您可以从第二个列表为O(n)(线性)解决方案创建字典:

import re
list1 = [2,1,3]
list2 = ['Contig_1_Length_1000','Contig_2_Length_500','Contig_3_Length_400','Contig_4_Length_300','Contig_5_Length_200','Contig_6_Length_100']
new_result = {int(re.findall('(?<=^Contig_)\d+', i)[0]):i for i in list2}
final_result = [new_result[i] for i in list1]

输出:

['Contig_2_Length_500', 'Contig_1_Length_1000', 'Contig_3_Length_400']

您可以使用startswith-它需要一个包含多个起始字符串的元组才能有效地扫描:

[i for i in list2 if i.startswith(tuple(list1))]

['Contig_1_Length_1000', 'Contig_2_Length_500', 'Contig_3_Length_400']

你可以这样使用列表理解:

list3 = [i for i in list2 if any(j in i for j in list1)]

相关问题 更多 >