Python:一个列表中的子集元素基于另一个列表中的子字符串,每个子字符串仅保留一个元素

标签 python subset

我有两个列表:

list1 = ['abc-21-6/7', 'abc-56-9/10', 'def-89-7/3', 'hij-2-4/9', 'hij-75-1/7']

list2 = ['abc', 'hij']

我想对 list1 进行子集化,以便:1)仅保留那些子字符串与 list2 中的元素匹配的元素,2)对于满足第一个要求的重复元素,我想仅随机保留其中一个重复项。对于这个具体示例,我希望生成如下结果:

['abc-21-6/7', 'hij-75-1/7']

我已经编写了代码来满足我的第一个要求:

[ele for ele in list1 for x in list2 if x in ele]

根据我的具体示例,返回以下内容:

['abc-21-6/7', 'abc-56-9/10', 'hij-2-4/9', 'hij-75-1/7']

但我陷入了第二步 - 如何在重复子字符串的情况下仅随机保留一个元素。我想知道 random.choice 函数是否可以以某种方式合并到这个问题中?任何建议将不胜感激!

最佳答案

您可以使用itertools.groupby:

import itertools
import random
list1 = ['abc-21-6/7', 'abc-56-9/10', 'def-89-7/3', 'hij-2-4/9', 'hij-75-1/7']

list2 = ['abc', 'hij']
new_list1 = [i for i in list1 if any(b in i for b in list2)]
new_data = [list(b) for a, b in itertools.groupby(new_list1, key=lambda x: x.split("-")[0])]
final_data = [random.choice(i) for i in new_data]

输出:

['abc-56-9/10', 'hij-75-1/7']

关于Python:一个列表中的子集元素基于另一个列表中的子字符串,每个子字符串仅保留一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302915/

相关文章:

python - 如何释放 pandas 数据帧而不是切片使用的内存?

r - 不删除 NA 的子集函数

python - Django 在 created_at 上注释

r - 对列表中匹配特定条件的多个数据帧进行子集化

python - 在c++中嵌入python时导入tensorflow返回null

python - 在 Python 的 PIL 中渲染波斯语(波斯语)单词

R - %in% 中使用的样本修改正在被子集化的数据帧

r - 在 R 中绘制分位数

python - 使用 pandas 查找重叠

python - 在 matplotlib 中动态更新绘图