gpt4 book ai didi

Python 列表、字典优化

转载 作者:行者123 更新时间:2023-11-28 16:42:36 25 4
gpt4 key购买 nike

我参加了几次编程马拉松。我开始明白光写代码是不够的。代码必须优化。这让我想到了我的问题。这是我遇到的两个问题。

def pairsum(numbers, k)
"""Write a function that returns two values in numbers whose sum is K"""
for i, j in numbers:
if i != j:
if i+j == k
return i, j

我写了这个函数。我有点被优化困住了。

下一个问题。

string = "ksjdkajsdkajksjdalsdjaksda"

def dedup(string):
""" write a function to remove duplicates in the variable string"""
output = []
for i in string:
if i not in output:
output.append(i)

这是我编写的两个非常简单的程序。但在此之后我坚持优化。更多关于这一点,当我们优化代码时,复杂性如何降低?任何指针都会有所帮助。提前致谢。

最佳答案

了解最高效的 Python 惯用语以及设计可以减少迭代并尽早通过答案退出的代码是优化的主要部分。下面是几个例子:

列表推导式和生成器通常是最快的:

使用直接的嵌套方法,生成器比 for 循环更快:

def pairsum(numbers, k):
"""Returns two unique values in numbers whose sum is k"""
return next((i, j) for i in numbers for j in numbers if i+j == k and i != j)

平均而言,这可能更快,因为它最多只进行一次迭代,并且不会检查可能的结果是否in numbers,除非 k-i != i:

def pairsum(numbers, k):
"""Returns two unique values in numbers whose sum is k"""
return next((k-i, i) for i in numbers if k-i != i and k-i in numbers)

输出:

>>> pairsum([1,2,3,4,5,6], 8)
(6, 2)

注意:我假设数字是一个平面列表,因为文档字符串没有提到元组,这使问题变得更加困难,这正是我在比赛中所期望的。

对于第二个问题,如果你要创建自己的函数而不是仅仅使用 ''.join(set(s)) 你就接近了:

def dedup(s):
"""Returns a string with duplicate characters removed from string s"""
output = ''
for c in s:
if c not in output:
output += c
return output

提示:不要使用string作为名字

您还可以:

def dedup(s):
for c in s:
s = c + s.replace(c, '')
return s

或更快的递归版本:

def dedup(s, out=''):
s0, s = s[0], s.replace(s[0], '')
return dedup(s, n + s0) if s else out + s0

但对于没有大量重复的字符串,速度不如set:

def dedup(s):
return ''.join(set(s))

注意:set() 不会保留剩余字符的顺序,而其他方法将保留基于第一次出现的顺序。

关于Python 列表、字典优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17375179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com