【问题标题】:one line for loop with function and tuple arguments带有函数和元组参数的一行 for 循环
【发布时间】:2014-12-12 02:49:32
【问题描述】:

我很感兴趣为什么我不能用 as 写一个 oneliner:

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)

提前致谢

【问题讨论】:

  • 尝试 [f(*i) for i in m]

标签: python function arguments tuples


【解决方案1】:

其实你可以:

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

【讨论】:

  • 或使用[x%y for x,y in ((1,2),(3,4),(5,6))],因为我们不需要第二个列表
  • 谢谢你,非常好和简单
【解决方案2】:

x for x in y 语法用于 Python 中的 list comprehensionsgenerator expressions、集合推导和字典推导。不包围()[]{}是无效的。

一个更正确的版本是

>>> 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]

【讨论】:

  • 谢谢你所有的建议都很好,但这正是我做错了什么的解释。谢谢您的帮助。非常感谢
【解决方案3】:

使用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 中使用元组参数解包,但是 it's gone in Python 3.x

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多