我知道你可以使用 Vim 替换文件中的某些模式:
:%s/<pattern>/<replacement>/g
Run Code Online (Sandbox Code Playgroud)
我想要做的是仅在辅助搜索匹配的情况下执行模式替换,例如:如果我的文件中有以下几行:
00_sub_5_train
01_sub_6_train
02_sub_5_train
03_sub_9_train
04_sub_8_train
05_sub_5_train
06_sub_5_train
Run Code Online (Sandbox Code Playgroud)
我想执行::%s/train/not_train/g仅在找到字符串“sub_5”的行上执行,剩下的就是:
00_sub_5_not_train
01_sub_6_train
02_sub_5_not_train
03_sub_9_train
04_sub_8_train
05_sub_5_not_train
06_sub_5_not_train
Run Code Online (Sandbox Code Playgroud)
这可能吗?
假设我有三个列表:
X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]
Z = [ 5, 2, 3, 1, 4, 9, 6, 0, 7]
Run Code Online (Sandbox Code Playgroud)
我可以很容易地根据 Y 对 X 进行排序:
XY_sort = [x for _,x in sorted(zip(Y,X))]
print(XY_sort) # ["a", "d", "h", "b", "c", "e", "i", "f", "g"]
Run Code Online (Sandbox Code Playgroud)
当我想根据产生 XY_sort 的排序对列表 Z 进行排序时,就会出现疑问。理想情况下,我想结束:
Z_sort = [5, 1, 0, 2, 3, 4, 7, 9, 6]
Run Code Online (Sandbox Code Playgroud)
我猜最好的方法是在 X 被排序到 XY_sort 时以某种方式存储它的排序索引,然后使用它们对 …