说我有一个清单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