2010-01-14 37 views

回答

11

绝对是一个列表理解的情况下:

m = [row for row in l if 'a' in row[0]] 

在这里,我把你的“有‘A’第一要素”的字面,何处使用in运营商。如果你想限制这“有‘A’第一要素”(一个非常不同的事情与您实际写的 - - !),然后

m = [row for row in l if 'a' == row[0]] 

是更喜欢它;-)。

1
m = [i for i in l if i[0] == 'a'] 
0

随着filter功能:

m = filter(lambda x: x[0] == 'a', l) 

或列表的理解:

m = [x for x in l where x[0] == 'a'] 
0

出了什么问题只是:

m = [i for i in l if i[0] == 'a'] 

或者:

m = filter(lambda x: x[0] == 'a', l) 

我怀疑这两者之间的差异将会是明显的性能。使用最方便的方式。我不喜欢lambda s,但filter可以用itertools.ifilter代替较大的列表(如果这是个问题),但是您也可以将列表理解更改为生成器(将[]更改为())以获得相同的一般结果。除此之外,它们可能完全相同。