python list 查找與過濾方法整合

查找list中是否有某個元素

這個是一個最基礎的操作,使用in操作符,如下所示:

3 in [1, 2, 3] # => True

過濾一個集合

過濾出滿足一定條件的所有元素,可以使用列表表達式或者生成器表達式:

matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)

後者返回一個生成器,你可以將它想象成一個延後列表(lazy list)僅僅當你迭代它的時候纔會被創建。順便說一下,第一個在py2中等價於

matches = filter(fulfills_some_condition, lst)

返回一個list。在python3中,filter不會返回一個list,而是一個類似於生成器的對象。

查找第一個匹配項

如果您只想要匹配條件的第一個元素(但是您還不知道它是什麼),那麼使用for循環是可以的(也可以使用else子句,但是都不太推薦)。推薦使用:

next(x for x in lst if ...)

如果沒有找到匹配項,則返回第一個匹配項或引發StopIteration異常。或者,您可以使用

next((x for x in lst if ...), [default value])

查找一個item的位置

查找item位置的基礎功能可以使用python數組的的index方法

[1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError

但是,請注意,如果您的數組中有重複值,.index總是返回最前面的索引:……

[1,2,3,2].index(2) # => 1

如果有重複,你想要所有的索引,你可以使用enumerate()代替:

[i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]

複雜數據查詢案例

假如有如下類型的數據

list=[{'id': '2', 'position': [3148.18, 4142.69]},{'id': '1', 'position': [3148.19, 142.69]}]

我想根據id來查找,並且獲得指定id的position。

list[next(index for (index, d) in enumerate(list1) if d["id"] == '2')]['position']

結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章