假设有一个A类,并且有一个被调用的A类实例列表lst.
假设我们想要m在列表中的每个实例上一次又一次地调用A类数百万次的特定方法(实际示例:entity.update()游戏循环中的方法).我们知道这样做的简单方法如下:
for obj in lst: obj.m()
Run Code Online (Sandbox Code Playgroud)
然而,那种代码让我们入睡.所以我们考虑map以下列方式使用:
map(lambda obj: obj.m(), lst)
Run Code Online (Sandbox Code Playgroud)
但是我们对上面的代码行进行了一些时间测试,结果发现它比我们的简单for循环慢得多.有时它甚至慢2倍.然后我们对自己说,"嗯也许它的速度慢,因为map构造了所有函数调用的返回值列表并返回该列表".
假设我们从懒惰和内存有效的内置函数中获取灵感xrange.在大多数情况下,我们认为,它是一个更酷的版本range.因此,我们定义一个名为的函数xmap,它只是在一个对象列表上应用一个函数,而不构造一个返回值列表并返回它.实施如下:
def xmap(func, lst):
for obj in lst: func(obj)
Run Code Online (Sandbox Code Playgroud)
非常酷,因为这个函数只执行for上面的循环,只有它允许我们保持花哨并发送我们的lambda函数.我们认为这是完美的妥协.但是我们一丝不苟和谨慎,所以我们决定制作2个脚本来测试代码的速度,看看我们是否真的比它更快map.
我们的第一个脚本将简单地使用map并且无用地构建我们甚至不需要的列表.
script1.py :
class A:
def m(self):
pass
lst = [A() for i in xrange(15)]
import time
start = time.time()
for i in xrange(1000000):
map(lambda obj: obj.m(), lst)
print time.time()-start, 'seconds' …Run Code Online (Sandbox Code Playgroud) 给定n个元素的一维数组,以及如何有效地旋转数组,使数组的元素向左移动m个位置?是否可以仅使用常数O(1)内存以O(n)时间复杂度执行此操作?
例如,如果n = 8并且你的数组是,[0, 1, 2, 3, 4, 5, 6, 7]并且你将它向左旋转m = 2,那么你就得到了[2, 3, 4, 5, 6, 7, 0, 1].
这是我实现的Python中的天真解决方案,它使用O(n)时间和O(n)内存和临时数组.
def rotateLeft(A, m):
temp = [None]*len(A)
for i in xrange(len(temp)):
temp[i] = A[(i + m) % len(A)]
for i in xrange(len(A)):
A[i] = temp[i]
Run Code Online (Sandbox Code Playgroud)
我怎么能更有效地做到这一点?我被告知这可以通过恒定的内存量来完成,并且仍然在O(n)时间内.
任何语言的解决方案都可以,任何建议都非常受欢迎.
编辑:我不是在寻找图书馆解决方案.此外,该数组不是链表/双端队列.没有头/尾/下一个/前一个元素的概念.
免责声明:这是一个Codewars问题.
您需要编写将验证密码的正则表达式,以确保其符合以下条件:
- 至少六个字符长
- 包含一个小写字母
- 包含一个大写字母
- 包含一个数字
有效密码仅为字母数字字符.
到目前为止,这是我的尝试:
function validate(password) {
return /^[A-Za-z0-9]{6,}$/.test(password);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,这样做是为了确保每个字符都是字母数字,密码至少包含6个字符.它似乎在这些方面正常工作.
我被困在需要有效密码至少有一个小写字母,一个大写字母和一个数字的部分.如何使用单个正则表达式表达这些要求以及之前的要求?
我可以轻松地在JavaScript中执行此操作,但我希望仅通过正则表达式来完成此操作,因为这是问题所在的测试.
我有一个字母表分隔符\n.
mylist = ['a\n','b c d e\n', 'f g h i j\n', 'k l m\n', 'n o\n', 'p q r s\n', 't\n', 'u v w x y z\n']
Run Code Online (Sandbox Code Playgroud)
我想将其转换为格式字典:
mydict= {
a: {}
b: {c, d, e}
f: {g, h, i, j}
k: {l, m}
n: {o}
p: {q, r, s}
t: {}
u: {v, w, x, y, z}
}
Run Code Online (Sandbox Code Playgroud)
在Python中实现这一目标的最佳方法是什么?
先感谢您.
python ×3
python-2.7 ×2
algorithm ×1
arrays ×1
dictionary ×1
javascript ×1
list ×1
performance ×1
regex ×1
vector ×1