想象一下,我有一个元组的顺序列表:
s = [(0,-1), (1,0), (2,-1), (3,0), (4,0), (5,-1), (6,0), (7,-1)]
Run Code Online (Sandbox Code Playgroud)
给定一个参数X,我想选择所有第一个元素等于或大于X但不包括第一个元组的元组,第一个元组具有-1作为第二个元素.
例如,如果X = 3,我想选择列表[(3,0), (4,0)]
我的一个想法是:获取切断键
E = min (x [0] for x in s if (x [0] >= X) and (x [1] == -1) )
Run Code Online (Sandbox Code Playgroud)
然后在X和之间选择带键的元素E:
R = [x for x in s if X <= x [0] < E]
Run Code Online (Sandbox Code Playgroud)
这给了我在R中想要的东西,但它似乎效率很低,涉及两次表扫描.我可以在for循环中执行它,丢弃键太小的元组,并在我击中第一个阻塞元组时中断.但对于像狗一样的跑步与列表选择相比.
这样做是否有超高效,python-esque(2.7)方式?
我最近不得不完成一项使用了大量坐标操作的任务.为了节省时间并简化我的代码,我定义了一个类来封装坐标对的行为.这堂课看起来像这样:
class Vector (tuple) :
def __init__ (self, value) :
tuple.__init__ (self, value)
def __add__ (self, other) :
return Vector ((self [0] + other [0], self [1] + other [1]))
Run Code Online (Sandbox Code Playgroud)
这允许我编写这样的代码(例如):
def translate (pointList, displacement) :
return [point + displacement for point in pointList]
Run Code Online (Sandbox Code Playgroud)
但我的申请非常缓慢.比其他任务慢得多.我找不到算法实现中的任何低效率,所以我做了一个简单的测试来看看Vector类的开销是多少.我预计在5%到15%之间.
我对Vector类的测试看起来像这样:
v = Vector ((0, 0))
d = Vector ((1, -1))
loopIdx = 3000000
while loopIdx > 0 :
v = v + d
loopIdx -= 1
print (v)
Run Code Online (Sandbox Code Playgroud)
这种情况(通常)在这种情况下运行:
real 0m8.440s
user 0m8.367s
sys …Run Code Online (Sandbox Code Playgroud) TP-Link无线适配器仅提供Windows驱动程序.TP-Link没有提供驱动程序,也没有表明他们打算这样做.
有第三方驱动程序吗?