python - 用每个级别的唯一元素替换路径列表 (/)

标签 python arrays list

我有一个路径字符串列表(可以形成树结构),如下所示:

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/

相关文章:

python - 在 Dict 中使用循环 .setdefault 创建嵌套 Dict

python - sys.getsizeof() 结果与结构大小不太相关

javascript - Javascript 数组的 Sum 函数问题

JAVA双向链表-统计相等的数据项

c# - 如何防止列表中的项目在未填写且应为 "0"时返回 "null"?

python - Matplotlib 箭袋量表

Python:numpy 的智能感知自动完成不正确

php - laravel 如何访问表的编号名称的列?

c - 直接寻址数组内存

r - 将表格列表转换为矩阵