查找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']