所以我有一个函数,在小列表上执行得很好。它的功能是检查从序列中删除一个元素是否会使该序列成为严格的递增序列:
def almostIncreasingSequence(sequence):
length = len(sequence)
for i in range(1, length):
newSequence = sequence[:i-1] + sequence[i:]
if checkIfSorted(newSequence, length):
return True
return checkIfSorted(sequence[:length-1], length)
def checkIfSorted(sequence, length):
for i in range(1, length - 1):
if sequence[i-1] >= sequence[i]:
return False
return True
但我需要它来处理长达10万个元素的列表。我可以做什么样的优化来更快地工作?现在,在10万个元素的列表中,它的速度非常慢,一秒钟要处理几千个元素。
我的解决方案:
def is_almost_increasing(x):
lastx = x[0] # value to use in the next comparison
found_one = False
for i in range(1, len(x)):
if x[i] <= lastx:
if found_one:
return False
found_one = True
if i > 1 and x[i] <= x[i-2]: # i > 1 in case the first comparison failed
break
lastx = x[i]
return True
print('\nThese should be True.')
print(is_almost_increasing([1]))
print(is_almost_increasing([1, 2]))
print(is_almost_increasing([1, 2, 3]))
print(is_almost_increasing([1, 3, 2]))
print(is_almost_increasing([10, 1, 2, 3, 4, 5]))
print(is_almost_increasing([0, -2, 5, 6]))
print(is_almost_increasing([1, 1]))
print(is_almost_increasing([1, 2, 3, 4, 3, 6]))
print(is_almost_increasing([1, 2, 3, 4, 99, 5, 6]))
print(is_almost_increasing([1, 2, 2, 3]))
print('\nThese should be False.')
print(is_almost_increasing([1, 3, 2, 1]))
print(is_almost_increasing([3, 2, 1]))
print(is_almost_increasing([1, 1, 1]))
这与罗里·道顿的非常相似,但略短。我从他提供的链接中借用了他的测试代码,所以感谢他。重点是你不想建立很多次要列表,这样效率很低。为了在效率上得到真正大的提高,你几乎总是需要找到一个更好的算法。
这里的两个复杂问题是(1)当第一个元素测试失败时该怎么办?(2)当你发现一个元素没有顺序时,你是删除那个元素还是删除它之前的元素?评论解决了这一点。
18.5. 优化列表操作 Soundex 算法的第三步是去除连续重复字符。 怎样做是最佳方法? 这里是我们目前在 soundex/stage2/soundex2c.py 中的代码: digits2 = digits[0] for d in digits[1:]: if digits2[-1] != d: digits2 += d 这里是
我在这里使用的所有方法几乎都是O(1)复杂度,比较器也不太费力,所以这不应该是问题,有什么我可能不知道的东西可以帮助我优化这个流操作吗?也许我用的入口集可以避免...?因为这可能是这里最贵的手术... 编辑1:也许我应该解释一下这个方法背后的想法。它的主要目的是对地图aux进行排序,并返回一个带有排序键的列表(键也被修改了,但这不是主要目的)
问题内容: 我想知道以下脚本是否可以某种方式进行优化。它确实在磁盘上写了很多东西,因为它可能删除了最新的行并重新插入它们。我正在考虑应用“在重复键更新中插入…”之类的东西,并发现了单行更新的一些可能性,但我不知道如何在的上下文中应用它。 编辑: 的架构,,,:http://pastebin.com/3tRVPPVi。 要点是更新列和中的内容。表上有一个触发器,可根据这些列设置列的值。 in是表中的
列表操作 列表的常用形式有图片形式与信息形式的,常见的有如下的操作: 显示列表 选择列表项 新增列表项 删除列表项 更新列表项 范例代码 数据结构 [ { "id": 22341234, "name": "Good Song", "album": { "id": 213512, "name": "Good Album" }, "a
18.6. 优化字符串操作 Soundex 算法的最后一步是对短结果补零和截短长结果。最佳的做法是什么? 这是目前在 soundex/stage2/soundex2c.py 中的做法: digits3 = re.sub('9', '', digits2) while len(digits3) < 4: digits3 += "0" return digit
ltrim key start end 保留指定区间内元素,成功返回1,key不存在返回错误。O(N)操作。 注意:N是被移除的元素的个数,不是列表长度。