首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用函数lambda修改下面的代码,并将python2代码过滤到python 3中

使用函数lambda修改下面的代码,并将python2代码过滤到python 3中
EN

Stack Overflow用户
提问于 2017-12-08 15:27:59
回答 1查看 338关注 0票数 2

我需要将以下python2.7代码转换为python3.5,同时获得错误

代码语言:javascript
复制
 for filename in sorted(glob.glob(self.path + '/test*.bmp'),
                               key=lambda f: int(filter(lambda x: x.isdigit(), f))):

Error:
Traceback (most recent call last):
  File "/Users/ImageSegmentation/preprocess.py", line 53, in get_gland
    key=lambda f: int((filter(lambda x: x.isdigit(), f)))):
  File "/Users/ImageSegmentation/preprocess.py", line 53, in <lambda>
    key=lambda f: int((filter(lambda x: x.isdigit(), f)))):
TypeError: int() argument must be a string, a bytes-like object or a number, not 'filter'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-08 15:32:51

在Python2中,当在输入中传递一个字符串时,filter用来返回一个字符串,这很方便。

现在,filter返回一个filter对象,需要对该对象进行迭代才能获得结果。

因此,您必须对结果使用"".join()来强制迭代&将其转换为字符串。

还请注意,lambda x: x.isdigit()是过分的和不合格的,直接使用str.isdigit

代码中另一个潜在的错误是,f是文件的完整路径名,因此如果路径中有数字,就会考虑到它们(并且很难确定),所以正确的修复方法是:

代码语言:javascript
复制
int("".join(filter(str.isdigit, os.path.basename(f))))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47717337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档