为了账号安全,请及时绑定邮箱和手机立即绑定

Python:比较字符串列表的元素,根据相似性排序

Python:比较字符串列表的元素,根据相似性排序

桃花长相依 2023-02-15 16:45:52
背景我有两个列表:list_1 = ['a_1', 'b_2', 'c_3'] list_2 = [ 'g b 2', 'f a 1', 'h c 3']请注意,列表中字符串元素的格式不同。换句话说,其中一个列表的元素不是另一个列表的子集。我想要比较list 1和list 2的元素,确定list 2中的元素与list 1相似然后我想按照['b_2', 'a_1', 'c_3']与列表 2 相同的顺序对列表 1 进行排序存在的问题Q1:这里,一个列表的元素在某种程度上与其他元素完全匹配 '2010-01-01 00:00' 和 '2010-01'。但是,就我而言,格式可能不同。Q2的类似情况。还有其他几个问题正在研究列表比较,但其中大多数比较相似的字符串。实际列表list_1 = ['f_Total_water_withdrawal', 'f_Precipitation', 'f_Total-_enewable_water_resources', 'f_Total_exploitable_water_resources',]list_2 = ['Precipitation','Total-renewable-water-resources', 'Total exploitable water resources', 'Total water withdrawal']
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

我可能会误解,但如果您的列表与您的示例相对应,您可以简单地定义list_1using list_2:


list_2 = ['g b 2', 'f a 1', 'h c 3']

list_1 = [f"{s[2]}_{s[4]}" for s in list_2]


print(list_1)

输出:


['b_2', 'a_1', 'c_3']


查看完整回答
反对 回复 2023-02-15
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

我相信有一些缺失的信息。尽管如此,对于给定的列表,我们可以设计这种方法:


# 1. Format list 2 to look like list 1

list_2_mod = [s[2:].replace(" ", "_") for s in list_2]


# 2. Filter elements in list 2 not in list 1

list_final = [s for s in list_2_mod if s in list_1]

聪明的做法是,给定您的 list_1(具有唯一元素,并且所有元素在 list_2 中具有明显的等效项),您只需要第一步。无需排序!list_2 已经排序好了。


查看完整回答
反对 回复 2023-02-15
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

我想我大概明白你想做什么。请看下面:


list_1 = ['a_1', 'b_2', 'c_3']

list_2 = [ 'g b 2', 'f a 1', 'h c 3']

dict_1 = {item1[0] + ' ' + item1[-1]: item1 for item1 in list_1}

l = [dict_1[item2[2:]] for item2 in list_2 if item2[2:] in dict_1]


查看完整回答
反对 回复 2023-02-15
  • 3 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信