Python:Lambda表达式

Python:Lambda表达式,python,Python,我尝试将输入作为: 1.jpg 10.png 11.png 2.jpg 3.png 并使用lambda表达式打印到列表: ['001.jpg', '010.png', '011.png', '002.jpg', '003.png'] 我认为我做对了。但它会出现以下错误: AttributeError:“list”对象没有属性“split” 我遗漏了什么?您可以使用simplestr.split并将数字长度作为字符串计算填充: s = '1.jpg 10.png 11.png 2.jpg 3

我尝试将输入作为:

1.jpg 10.png 11.png 2.jpg 3.png
并使用lambda表达式打印到列表:

['001.jpg', '010.png', '011.png', '002.jpg', '003.png']

我认为我做对了。但它会出现以下错误: AttributeError:“list”对象没有属性“split”


我遗漏了什么?

您可以使用simple
str.split
并将数字长度作为字符串计算填充:

s = '1.jpg 10.png 11.png 2.jpg 3.png'
result = list(map(lambda x:'0'*(3-len(x.split('.')[0]))+x, s.split()))
输出:

['001.jpg', '010.png', '011.png', '002.jpg', '003.png']

这里的列表理解比
map
lambda
更有效,可读性也更高

s = '1.jpg 10.png 11.png 2.jpg 3.png'
result = ['{0:0>3}.{1}'.format(*x.split('.')) for x in s.split()]

您不需要任何映射或lambda,只需
zfill

print([x.zfill(8) for x in input().split()])

在本例中,将
8
调整为所需的任意长度

显示错误。@hpaulj AttributeError:“list”对象没有属性“split”,您可以将字符串拆分为字符串列表。确保您了解每个变量是什么。我无法获取您的错误。我的错误表明不允许将lambda函数作为参数传递给format。@Ofer Sadan给出的答案非常优雅,你应该使用它。既然你想知道你错过了什么,我建议你看看这种方法,打印(列表(map(lambda x:{0:03d}.{1}).格式(int(x.split('..')[0]),x.split('.')[1]))你能帮我写代码吗?我只是想知道我错过了什么,我甚至没有想到答案会很好!
print([x.zfill(8) for x in input().split()])