我有一段代碼,我應該創建一個總機。我想返回所有打開的開關的列表。這裏的「on」將等於True
,「off」等於False
。所以現在我只想返回所有True
值及其位置的列表。這是我的全部,但它只有返回True
中第一次出現的位置(這只是我的代碼部分):「4」在布爾列表中獲取真值的索引
31
A
回答
45
使用enumerate
,list.index
回報
self.states = [False, False, False, False, True, True, False, True, False, False, False, False, False, False, False, False]
def which_switch(self):
x = [self.states.index(i) for i in self.states if i == True]
這隻回報找到第一個匹配的索引。
>>> t = [False, False, False, False, True, True, False, True, False, False, False, False, False, False, False, False]
>>> [i for i, x in enumerate(t) if x]
[4, 5, 7]
對於龐大的列表,它會更好地使用itertools.compress
:
>>> from itertools import compress
>>> list(compress(xrange(len(t)), t))
[4, 5, 7]
>>> t = t*1000
>>> %timeit [i for i, x in enumerate(t) if x]
100 loops, best of 3: 2.55 ms per loop
>>> %timeit list(compress(xrange(len(t)), t))
1000 loops, best of 3: 696 µs per loop
2
您可以使用過濾器是:
filter(lambda x: self.states[x], range(len(self.states)))
的range
這裏列舉列表的元素因爲我們只需要那些self.states
爲True
的人,我們正在應用基於此條件的過濾器。
0
使用字典理解的方式,
x = {k:v for k,v in enumerate(states) if v == True}
輸入:
states = [False, False, False, False, True, True, False, True, False, False, False, False, False, False, False, False]
輸出:
{4: True, 5: True, 7: True}
+2
這是一個字典理解而不是列表理解。 –
22
如果您有可用numpy的:
>>> import numpy as np
>>> states = [False, False, False, False, True, True, False, True, False, False, False, False, False, False, False, False]
>>> np.where(states)[0]
array([4, 5, 7])
+4
請注意,這返回一個元組,它需要'np.where(states)[0]'實際使用結果 – Woofas
相關問題
- 1. python pandas從一系列布爾值中獲取索引邊界
- 2. 獲取索引的布爾向量
- 3. Hibernate中的布爾真值
- 4. 真值的行列索引
- 5. 獲取布爾值
- 6. 訪問索引行/布爾矩陣的列如果爲真
- 7. 從列表列表中獲取索引
- 8. 按索引獲取列表值
- 9. 如何讓一個布爾值索引唯一爲真
- 10. 在列表中獲取唯一索引?
- 11. 在索引中使用布爾值或枚舉列?
- 12. 在列表多維C#中搜索布爾值並賦值
- 13. 如何獲取存儲在索引中的值列表?
- 14. SML - 獲取列表索引
- 15. Python:獲取列表索引
- 16. 獲取列表中物品的索引
- 17. 在Python中的列表中獲取列表理解索引
- 18. 布爾索引的列值存儲爲一個變量在python
- 19. Python中的列表的子集的布爾索引
- 20. 布爾邏輯/真值表和輸出
- 21. 從系列中獲取索引和值
- 22. 布爾索引ND numpy的陣列
- 23. 在xarray布爾索引
- 24. TensorFlow布爾索引
- 25. 從ResultSet獲取布爾值
- 26. 從JDBC獲取布爾值
- 27. 從PostgreSQL獲取布爾值
- 28. NSThread - 獲取布爾值
- 29. 從符合布爾條件的NumPy數組中獲取(列,行)索引
- 30. 如何從C#中的列表中獲取索引值?
啊,我看到了,我看到一些類似的問題,告訴我使用枚舉,但我想我錯了。我將列表設置爲'x',然後執行'enumerate(x)',但我想我所做的只是枚舉4?那是怎麼回事?感謝您的幫助 – Amon
當您在列表理解中爲i,x做'i'時會發生什麼?例如,我只習慣看「我爲我」或類似的格式,「x」的功能是什麼?謝謝 – Amon
@Amon'enumerate'在循環期間返回一個元組(ind,value),現在我們可以使用:'i,x =(ind,value)'將元組的項賦給兩個變量。這正是這個循環中發生的事情。 –