比方說,我有一個多維列表L:濾鏡陣列,以顯示與特定值排在一個特定的列
l = [['a', 1],['b', 2],['c', 3],['a', 4]]
,我想返回只由該行有「A」在另一份名單他們的第一個列表元素:
m = [['a', 1],['a', 4]]
這樣做的好方法和有效方法是什麼?
比方說,我有一個多維列表L:濾鏡陣列,以顯示與特定值排在一個特定的列
l = [['a', 1],['b', 2],['c', 3],['a', 4]]
,我想返回只由該行有「A」在另一份名單他們的第一個列表元素:
m = [['a', 1],['a', 4]]
這樣做的好方法和有效方法是什麼?
絕對是一個列表理解的情況下:
m = [row for row in l if 'a' in row[0]]
在這裏,我把你的「有‘A’在第一要素」的字面,何處使用in
運營商。如果你想限制這「有‘A’爲第一要素」(一個非常不同的事情與您實際寫的 - - !),然後
m = [row for row in l if 'a' == row[0]]
是更喜歡它;-)。
m = [i for i in l if i[0] == 'a']
出了什麼問題只是:
m = [i for i in l if i[0] == 'a']
或者:
m = filter(lambda x: x[0] == 'a', l)
我懷疑這兩者之間的差異將會是明顯的性能。使用最方便的方式。我不喜歡lambda
s,但filter
可以用itertools.ifilter
代替較大的列表(如果這是個問題),但是您也可以將列表理解更改爲生成器(將[]
更改爲()
)以獲得相同的一般結果。除此之外,它們可能完全相同。
[i for i in l if i[0]=='a']
btw,看看Python的list comprehension with conditions。