我有一個可能很長的對象的Python列表。在特定時間,我對列表中具有某個屬性的所有元素(例如flag
)感興趣,該元素的評估結果爲False。爲此,我一直在使用列表理解,像這樣:有效使用Python列表解析
objList = list()
# ... populate list
[x for x in objList if not x.flag]
這似乎很好。形成子表後,我有可能需要做一些不同的操作:
- 標中的子表索引
ind
得到的元素。 - 計算子列表的長度(即具有
flag == False
的元素的數量)。 - 搜索子列表用於特定對象的第一個實例(使用列表的
.index()
方法即)。
我已經實現了這些使用幼稚的方法,只是形成子列表,然後使用它的方法來獲取我想要的數據。我想知道是否有更有效的方法去解決這些問題。 #1和#3至少看起來像他們可以優化,因爲在#1我只需要第一個ind + 1
匹配元素的子列表,不一定是整個結果集,在#3我只需要通過子列表搜索直到我找到了一個匹配元素。
有沒有一個很好的Pythonic方法來做到這一點?我猜我可能會以某種方式使用()
語法來獲取生成器,而不是創建整個列表,但我還沒有以正確的方式發生。我顯然可以手動編寫循環,但我正在尋找像基於理解的方法一樣優雅的東西。
爲什麼'使用()'而不是'nnth()'? – kennytm
@KennyTM好的建議,應該有點閱讀 - 編輯使用''nth()'',這是一個更好的解決方案 - 沒有意義重新發明輪子。 –