在Python的列表中查找子组中的公共字符串

2024-09-27 23:23:20 发布

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

我正试图通过删除重复项来清理列表。例如:

 bb = ['Gppe (Aspirin Combined)', 
       'Gppe Cap (Migraine)',  
       'Gppe Tab', 
       'Abilify', 
       'Abilify Maintena', 
       'Abstem', 
       'Abstral']

理想情况下,我需要得到以下列表:

 bb = ['Gppe', 
       'Abilify', 
       'Abstem', 
       'Abstral']

我尝试的是:

  1. 拆分列表并删除重复项(一种简单的方法)

    list(set(sorted([j for bb_i in bb for j in bb_i.split(' ')])))

留下很多“垃圾”:

['(Aspirin',
 '(Migraine)',
 'Abilify',
 'Abstem',
 'Abstral',
 'Cap',
 'Combined)',
 'Gppe',
 'Maintena',
 'Tab']
  1. 找到最常用的词:

Counter(['Gppe (Aspirin Combined)', 'Gppe Cap (Migraine)', 'Gppe Tab').most_common(1)[0][0]

但我不知道如何找到相似的词(一组)??你知道吗

我想知道,是否可以使用一种“groupby()”和第一个groupby名称,然后删除这些名称中的重复项。你知道吗


Tags: in列表fortabcapgroupbybbcombined
3条回答

您可以这样做,假设您想要每个字符串的唯一第一个单词

bb = ['Gppe (Aspirin Combined)',
       'Gppe Cap (Migraine)',
       'Gppe Tab',
       'Abilify',
       'Abilify Maintena',
       'Abstem',
       'Abstral']


result = set(map(lambda x: x.split()[0], bb))
print(result)

输出

{'Gppe', 'Abstral', 'Abilify', 'Abstem'}

如果要按外观顺序列出唯一元素,可以执行以下操作:

bb = ['Gppe (Aspirin Combined)',
       'Gppe Cap (Migraine)',
       'Gppe Tab',
       'Abilify',
       'Abilify Maintena',
       'Abstem',
       'Abstral']

seen = set()
result = []
for e in bb:
    key = e.split()[0]
    if key not in seen:
        result.append(key)
        seen.add(key)

print(result)

输出

['Gppe', 'Abilify', 'Abstem', 'Abstral']

作为第一种解决方案的替代方案,您可以:

  1. 作者:Jean-Françoisfare{x.split()[0] for x in bb}
  2. 由@RoadRunnerset(x.split()[0] for x in bb)建议

您可以尝试拆分每个项目,只收集分隔符(空格)前的第一个字符串

print(list(set(item.split(' ',1)[0] for item in bb)))

这看起来像是得到了你需要的东西:

['Abilify', 'Abstem', 'Gppe', 'Abstral']

如果顺序无关紧要,你可以使用一套理解:

res = list({x.split()[0] for x in bb})

如果顺序很重要,并且您有Python3.6或更高版本,您可以使用dict理解:

res = list({x.split()[0]:None for x in bb})

如果顺序很重要,并且您有Python 3.5或更低版本,则可以使用OrderedDict:

from collections import OrderedDict
res = list(OrderedDict((x.split()[0],None) for x in bb))

相关问题 更多 >

    热门问题