python - 使用正则表达式删除列表中的重复项并保留第一
问题描述
我有一个 python 列表,例如
my_list = [
'NIJG01002710.1_2-HSPs_-__Canis_lupus',
'scaffold_313646_1-397_-__Homo_sapiens',
'scaffold_366690_1-238_+__Homo_sapiens',
'NIJG01003276.1_11652-11883_-__Cattus_cattus',
'NIJG01006295.1_7474-7678_-__Cattus_cattus','YP_009353','NP_87899'
]
而且我只想根据模式_-__
或, 之后的元素保留第一个重复值,并_+__
在这里重复两次。Cattus_cattus
Homo_sapiens
在这里我应该得到:
[
'NIJG01002710.1_2-HSPs_-__Canis_lupus',
'scaffold_313646_1-397_-__Homo_sapiens',
'NIJG01003276.1_11652-11883_-__Cattus_cattus','YP_009353','NP_87899'
]
到目前为止,我知道如何使用以下代码删除重复项:
mylist = list(dict.fromkeys(mylist))
但我不知道如何只在正则表达式模式后使用重复元素来做到这一点。
一种方法是首先使用以下模式删除所有内容:
my_list=[re.sub(r'*_?__', '', i) for i in x]
然后使用:
mylist = list(dict.fromkeys(mylist))
但是通过这种方式,我在需要保留的模式之前丢失了信息。
解决方案
my_list = [
'NIJG01002710.1_2-HSPs_-__Canis_lupus',
'scaffold_313646_1-397_-__Homo_sapiens',
'scaffold_366690_1-238_+__Homo_sapiens',
'NIJG01003276.1_11652-11883_-__Cattus_cattus',
'NIJG01006295.1_7474-7678_-__Cattus_cattus']
print([f'{value}__{key}' for key, value in
dict(item.split('__')[::-1] for item in
my_list[::-1]).items()][::-1])
输出
['NIJG01002710.1_2-HSPs_-__Canis_lupus',
'scaffold_313646_1-397_-__Homo_sapiens',
'NIJG01003276.1_11652-11883_-__Cattus_cattus']
推荐阅读
- go - 函数接受抽象接口和函数接受结构体实现之间的golang转换
- python - 是否有必要使用“numpy.float64”?
- r - 栅格范围和分辨率的修改会改变像素值的总和
- java - 如何从对象列表中提取元素并存储在字符串数组中
- algorithm - 离当前点最近的点
- android - 无法在活动中使日期选择器全屏显示
- delphi - 为什么我收到 E2531“方法需要显式类型参数”
- spring - Spring Boot OAuth2 - 空范围(不允许客户端或用户请求的范围)
- python - python身份危机为什么l或x复制0而不是新的0
- git - 如何从 gitk 暂存和提交?