我有一个路径字符串列表(可以形成树结构),如下所示:
xo = ['1/sometext1',
'1/1/sometext2',
'1/1/1/sometext3',
'1/1/2/sometext4',
'1/2/sometext5',
'1/2/1/sometext6',
'1/2/2/sometext7',
'2/sometext8',
'3/sometext9']
我想将上面的列表转换为如下形式,其中包含特定于每个级别的唯一编号。这样就可以正确区分 ('1/', '1/1/','1/1/1/') 中的 1 和 ('1/1/2/','1/2/','1/2/1/','1/2/2/','2/')。
xd = ['123/sometext1',
'123/1234/sometext2',
'123/1234/12345/sometext3',
'123/1234/234/sometext4',
'123/2345/sometext5',
'123/2345/123456/sometext6',
'123/2345/23456/sometext7',
'234567/sometext8',
'3456/sometext9']
唯一值仅作为示例,可以是任何唯一字符串。
最佳答案
此示例将为每个级别添加深度数字:
import re
xo = [
"1/sometext1",
"1/1/sometext2",
"1/1/1/sometext3",
"1/1/2/sometext4",
"1/2/sometext5",
"1/2/1/sometext6",
"1/2/2/sometext7",
"2/sometext8",
"3/sometext9",
]
pat = re.compile(r"((?:\d+/)+)(.*)")
out = []
for s in xo:
nums, rest = pat.match(s).groups()
nums = "/".join(f"{i}-{n}" for i, n in enumerate(nums.split("/"), 1) if n)
out.append(nums + "/" + rest)
print(out)
打印:
[
"1-1/sometext1",
"1-1/2-1/sometext2",
"1-1/2-1/3-1/sometext3",
"1-1/2-1/3-2/sometext4",
"1-1/2-2/sometext5",
"1-1/2-2/3-1/sometext6",
"1-1/2-2/3-2/sometext7",
"1-2/sometext8",
"1-3/sometext9",
]
编辑:修改示例:
import re
xo = [
"1/sometext1",
"1/1/sometext2",
"1/1/1/sometext3",
"1/1/2/sometext4",
"1/2/sometext5",
"1/2/1/sometext6",
"1/2/2/sometext7",
"2/sometext8",
"3/sometext9",
]
pat = re.compile(r"((?:\d+/)+)(.*)")
out = []
for s in xo:
nums, rest = pat.match(s).groups()
tmp = [n for n in nums.split("/") if n]
nums = "/".join(f"{'.'.join(tmp[:i])}" for i in range(1, len(tmp) + 1))
out.append(nums + "/" + rest)
print(out)
打印:
[
"1/sometext1",
"1/1.1/sometext2",
"1/1.1/1.1.1/sometext3",
"1/1.1/1.1.2/sometext4",
"1/1.2/sometext5",
"1/1.2/1.2.1/sometext6",
"1/1.2/1.2.2/sometext7",
"2/sometext8",
"3/sometext9",
]
关于python - 用每个级别的唯一元素替换路径列表 (/),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68964847/