带函数和元组参数的一行for循环

0 投票
3 回答
4858 浏览
提问于 2025-04-27 23:39

我很好奇为什么我不能用 as 写成一行代码:

m=[(1,2),(3,4),(5,6)]
f=lambda x,y:return x%y
f(*i) for i in m

但我不得不把最后一行展开成:

for i in m:
  f(*i)

提前谢谢你们!

暂无标签

3 个回答

2

使用 map

>>> m = [(1,2),(3,4),(5,6)]
>>> f = lambda x: x[0] % x[1]  # No return statement in lambda.
>>> map(f, m)  # list(map(f, m)) in Python 3.x
[1, 3, 5]

如果你使用的是 Python 2.x,可以在 lambda 中使用元组参数解包,但在 Python 3.x 中这个功能就没有了,具体可以查看 这个链接

f = lambda (x, y): x % y
3

其实,你可以这样做:

>>> [x%y for x,y in [(1,2),(3,4),(5,6)]]
[1, 3, 5]
2

在Python中,x for x in y这种写法常用于列表推导式、生成器表达式、集合推导式和字典推导式。也就是说,如果你想用这种方式来创建数据结构,必须把它放在()[]{}里面,否则就不合法。

一个更正确的写法是

>>> m = [(1, 2), (3, 4), (5, 6)]
>>> f = lambda x,y: x % y # Note no return
>>> [f(*i) for i in m]
[1, 3, 5]

或者更简单的写法是

>>> [x % y for x,y in ((1, 2), (3, 4), (5, 6))]
[1, 3, 5]

撰写回答