有没有更好的方法来做这个python代码?

时间:2010-11-20 01:10:08

标签: python

看一下我写的这段python代码:

return map(lambda x: x[1], 
           filter(lambda x: x[0] == 0b0000, 
                  my_func(i)
                 )
          )

(希望它不言自明)

我想知道python是否有更好的方法吗?

几个月前我学过python,编写了几个脚本,之后就没用过了。它让我处于一个奇怪的学习地点,因为我知道我想做的事情,但没有新手本能找到“正确”的方式。我希望这个问题会让我回到正轨......

4 个答案:

答案 0 :(得分:9)

我认为你想要一个列表理解:

[x[1] for x in my_func(i) if x[0] == 0]

列表推导是一种非常常见的Python习语。

答案 1 :(得分:2)

您可以使用以下内容:

return [x[1] for x in my_func(i) if x[0] == 0b0000]

很多人会称之为“更好”,因为它更短,更明显。

(我很想考虑把它变成一个简单的循环和if语句。函数编程很好但是简单的循环也很好。)

答案 2 :(得分:1)

如果您使用Python 3.x编写,那么您可以编写一个有效的生成器表达式,例如:return (x[1] for x in my_func(i) if not x[0])

答案 3 :(得分:1)

在python 3.x中,您可以使用解压缩来避免使用x[0]x[1]。 如果你只想循环结果一次,你可以考虑返回一个生成器表达式而不是列表推导:

return (y for x,y,*z in my_func(i) if x == 0b0000)