說我有一個清單t = list(i for i in np.arange(0.5,10.5,0.5))
。我想在t
之內找到s=[3,5,7]
的指數頭寸。我知道我可以通過t.index(s)
循環來做到這一點,但有沒有更優雅的方式?什麼是一種優雅的方式來返回沒有循環的python中的列表的索引?
回答
認識到你總是需要一些循環很重要。即使t.index
做了一個循環,它只是隱藏它從你!不過據我所知,Python標準庫中沒有函數可以避免s
的顯式循環。
但是一個可以使它更有效的(我的意思是比[t.index(needle) for needle in s]
更有效)!特別是如果你的清單是排序的。
您已使用NumPy
所以np.searchsorted
肯定是快:
import numpy as np
t = np.arange(0.5,10.5,0.5)
s = [3, 5, 7]
np.searchsorted(t, s)
如果你想留在Python裏面還有bisect
模塊,至少可以節省一些(隱含的)循環的:
from bisect import bisect_left
def index(a, x): # Taken from the bisect documentation
'Locate the leftmost value exactly equal to x'
i = bisect_left(a, x)
if i != len(a) and a[i] == x:
return i
raise ValueError
indices = [index(t, needle) for needle in s]
如果你真的想要花哨(並且我喜歡搞過早的優化),你也可以對針列表進行排序,然後將先前找到的索引加1,作爲'lo'參數設置爲'bisect_left'。 –
@DavidScarlett這取決於值的分佈方式,因爲'bisect'首先從中間索引開始(在'lo'和'hi'之間),但是下一個值接近最後找到的索引的機會很大(if它非常接近它需要很多的平分步驟)。所以你可能有更多的步驟,直到你找到下一個值。至少我發現它很少表現得更好,大部分時間都比較慢。 – MSeifert
- 1. 在Python中編寫循環的最優雅方式是什麼?
- 2. 更優雅的方式返回列表的索引
- 3. 有沒有更優雅的方式來搜索電臺索引?
- 4. 有沒有更優雅的方式來編寫這個循環?
- 5. 什麼是最優雅的方式來檢索MySQL表評論?
- 6. 有沒有一種優雅的方式來搜索關聯數組在JavaScript中?
- 7. 有沒有更優雅的方式來制定這個Python循環?
- 8. 返回工作的第一種方法,更優雅的方式?
- 9. 什麼是壓縮此循環的優雅方式?
- 10. 優雅的方式來索引3D陣列,並使用numpy的
- 11. 有沒有一種優雅的方式來重載插件內的jQuery方法?
- 12. 有沒有一種優雅的方式來防止JavaScript中的祖先點擊?
- 13. 什麼是一個循環迭代影響另一個優雅的方式?
- 14. 什麼是最優雅的方式來查找C#列表中重複項目的索引
- 15. 有沒有一種優雅的方式來確定ifstream是否附加到stdin?
- 16. 優雅的方式來過濾列表
- 17. 優雅的方式來循環gnuplot 4.6中的幾個語句?
- 18. 有沒有一種優雅的方式來訪問表「列」,而不是使用sqlalchemy的行?
- 19. 在Active Record中,是否有一種優雅的方式來處理累積一組集合的返回?
- 20. 有沒有更優雅的方式來安排我的表格?
- 21. 有沒有一種優雅的方式來閱讀這個Nokogiri解析的XML?
- 22. 有沒有一種優雅的方式來摺疊不斷增長的scala.collections.mutable.Queue?
- 23. 有沒有一種更優雅的方式來在C#中嵌套數組?
- 24. 有沒有一種更優雅的方式來寫在JavaScript中呢?
- 25. 在循環中從C#ArrayList中移除元素的優雅方式是什麼?
- 26. 從列表創建數組的優雅方式是什麼?
- 27. 一個優雅的方式,使python中的函數列表
- 28. 優雅的方式來操縱列表中的列表?
- 29. Python中列表的循環索引
- 30. 有沒有一種優雅的方式來重複一個動作?
該列表是否包含唯一值? – taesu
嘿,是的,它包含了獨特的價值 – A1122