2010-07-19 73 views
11

给定一个未排序数字的列表,我想找到大于N的最小数字(如果有的话)。python - 列表操作

在C#中,我会做这样的事情(略检查):

var x = list.Where(i => i > N).Min(); 

什么是在Python做这个很短的,可读的方式?

+1

*你*是什么意思的“可读”? – 2010-07-19 14:55:48

+0

@SLott “read·a·ble /rēdəbəl/:(2)轻松愉快地阅读。” 你是什么意思“可读性是什么意思?” ? – 2010-07-21 14:40:27

回答

19
>>> l = [4, 5, 12, 0, 3, 7] 
>>> min(x for x in l if x > 5) 
7 
+0

小写ell不是变量名称的好选择 – 2010-07-19 18:22:45

+0

@Marius:你真的低估了我这个吗?使用过滤器的 – SilentGhost 2010-07-19 20:29:09

2
x = min(i for i in mylist if i > N) 
4
min(x for x in mylist if x > N) 
3

其他人都放弃列表理解的答案。作为替代,filter对于“过滤”列表中的元素很有用。

min(filter(lambda t: t > N, mylist)) 
+1

比使用生成器表达式 – 2010-07-19 14:47:27

+0

+1稍慢。我已经提出这个问题的一部分来提高我的Python技能,所以这个答案很好地满足了我的目的。 – 2010-07-21 14:38:03