在Python中有没有更好的方法?
在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念,或者在写代码的时候犯了一些小错误。
比如,有些人可能在使用某个函数的时候,不太清楚这个函数具体是干什么的,或者它需要什么样的输入。这就像你在做菜的时候,如果不知道某个调料的作用,就可能做出不好吃的菜。
另外,编程中还有很多术语和概念,初学者可能会觉得很复杂。其实,只要慢慢来,逐步理解这些内容,就会变得简单很多。
总之,遇到问题时,不要着急,先冷静下来,仔细检查代码,或者查阅相关资料,慢慢你就会掌握这些知识了。
ids = []
for object in objects:
ids += [object.id]
4 个回答
3
还有一种方法:
ids = map(lambda x: x.id, objects)
4
标准的(也就是“pythonic”,也就是最干净的)做法是使用列表推导式:
ids= [obj.id for obj in objects]
这个方法适用于所有Python版本≥2.0。
其他方法(仅供参考)
在Python 2中,你还可以这样做:
ids= map(lambda x: x.id, objects)
这个方法应该是最慢的,或者
# note: Python ≥ 2.4
import operator
ids= map(operator.attrgetter('id'), objects)
这个方法可能是最快的,虽然我觉得速度差别不会太大;无论如何,列表推导式的清晰性比速度提升更重要。
如果你想在Python 3中使用其他方法,你需要把map
的调用放在list
的调用里面:
ids= list(map(operator.attrgetter('id'), objects))
因为在Python 3中,map
这个内置函数返回的是一个生成器,而不是一个列表。
27
你可以使用列表推导式:
ids = [object.id for object in objects]
供你参考:
这两种方法的结果是一样的。在很多情况下,列表推导式是一种优雅且符合Python风格的做法,可以实现你提到的功能。