gpt4 book ai didi

Python 比较列表中的部分字符串

转载 作者:行者123 更新时间:2023-12-01 11:11:20 25 4
gpt4 key购买 nike

我正在尝试编写代码来将列表中的每个字符串相互比较,然后生成其相似性的正则表达式

list = ["LONDON-UK-L16-N1",
"LONDON-UK-L17-N1",
"LONDON-UK-L16-N2",
"LONDON-UK-L17-N2",
"PARIS-France-L16-N2"]

我正在尝试获得如下输出

LONDON-UK-L(16|17)-N(1|2)

这可能吗?谢谢

更新:只是为了说明我正在尝试输入:列表或字符串行动:将列表项相互比较,并检查相似性(修复它 - 字符串的第一组),并对项目的任何其他不相似部分使用正则表达式,因此我们可以有一个输出而不是项目(使用正则表达式)输出:匹配不相似的正则表达式

输入:tez15-3-s1-y2tez15-3-s2-y2bro40-55-s1-y2

输出:tez15-3-s(1|2)-y2,bro40-55-s1-y2

最佳答案

从您的问题中不能完全清楚确切的问题是什么。由于您作为示例提供的数据是一致且有序的,因此只需拆分列表中的项目并对其进行分类即可轻松解决此问题。

loc_list = ["LONDON-UK-L16-N1", "LONDON-UK-L17-N1", "LONDON-UK-L16-N2", 
"LONDON-UK-L16-N2", "PARIS-France-L16-N2"]

split_loc_list = [location.split("-") for location in loc_list]

locs = {}

for loc in split_loc_list:
locs.setdefault("-".join(loc[0:2]), {}).\
setdefault("L", set()).add(loc[2].strip("L"))

locs.setdefault("-".join(loc[0:2]), {}).\
setdefault("N", set()).add(loc[3].strip("N"))

for loc, vals in locs.items():
L_vals_sorted = sorted(list(map(int,vals["L"])))
L_vals_joined = "|".join(map(str,L_vals_sorted))

N_vals_sorted = sorted(list(map(int,vals["N"])))
N_vals_joined = "|".join(map(str,N_vals_sorted))

print(f"{loc}-L({L_vals_joined})-N({N_vals_joined})")

将输出:

LONDON-UK-L(16|17)-N(1|2)
PARIS-France-L(16)-N(2)

因为这里只有两个标签(“L”和“N”),所以我就把它们写到代码里了。如果可能有很多标签,那么您可以使用以下方式删除任何字母:

import re
split = re.findall('\d+|\D+', loc[2])
key, val = split[0], split[1]
locs.setdefault("-".join(loc[0:2]), {}).\
setdefault(key, set()).add(val)

然后遍历所有标签,而不是在第二个循环中只获取“L”和“N”。

关于Python 比较列表中的部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60026989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com