lambda函数和正则表达式

问题描述 投票:0回答:1

我正在使用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)的目的又是什么?

谢谢

python findall
1个回答
1
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.