我正在使用https://towardsdatascience.com/a-keras-pipeline-for-image-segmentation-part-1-6515a421157d中的脚本来拆分数据集。我不明白这部分在做什么
all_frames = os.listdir(FRAME_PATH)
all_masks = os.listdir(MASK_PATH)
all_frames.sort(key=lambda var:[int(x) if x.isdigit() else x
for x in re.findall(r'[^0-9]|[0-9]+', var)])
all_masks.sort(key=lambda var:[int(x) if x.isdigit() else x
for x in re.findall(r'[^0-9]|[0-9]+', var)])
更具体地说,我不了解var:
的所有操作。我的第一个猜测是列表理解,但它不遵循结构。
[ expression for item in list if conditional ]
[这部分re.findall(r'[^0-9]|[0-9]+', var)
的目的又是什么?
谢谢
lambda: var
部分是anonymous function。
它还包含三元运算符int(x) if x.isdigit() else x
,它也不是正则表达式的一部分。这就是说“如果只包含数字,则将x
(从列表理解范围内)转换为整数”。
所以我们可以像这样全部写出来:
def convert_integer(x):
if x.isdigit():
return int(x)
else:
return x
def key_function(var):
return ([convert_integer(x)
for x in re.findall(r'[^0-9]|[0-9]+', var)])
all_frames.sort(key = key_function)