我想写一个函数pairSum(数据,价值),其中如果列表“数据”包含两个distict数字的总和等于“价值”,该函数返回true。我用列表完成了这个,但是有没有更高效的方法可以使用字典编写这个函数?Python的PairSum函数与字典
回答
你可以尝试使用一套。
def pairSum(data, value):
s = set()
for i in data:
if (value - i) in s:
return True
else:
s.add(i)
else:
return False
不错!你的解决方案是O(n),我们实际上不需要在这里计算所有可能的组合。 – Akavall 2012-04-22 04:11:49
from itertools import combinations
pairSum = lambda data, value: any(sum(i) == value for i in combinations(data, 2))
编辑 佩德罗韦尔内克指出,在set()
会员测试可能更有效:
pairSum = lambda data, value: value in set(sum(i) for i in combinations(data, 2))
进一步编辑 我把伊格纳西奥的建议,并测试了两种方法使用timeit
。结果如下:
对于所有测试,测试的功能与我在原始答案(上面)中发布的功能相同。处决
timeit数为10,000
data = range(100)
Test Value Generator Set
1 0.02824 10.84905
101 0.66934 10.77293
197 11.07062 10.73978
所以得出的结论似乎是,发电机运行在平均水平,与这两个最坏的情况下倍对于设置和发电机大致相同。
any()进行线性搜索,因此在set(sum(i)for i in combination(data,2))中做值可能更有效。 – 2012-04-22 03:36:46
@Pedro:生成一个集合仍然是线性的,所以你可以节省很少的东西。 – 2012-04-22 03:50:57
@PedroWerneck:嗯,我不确定。我认为这取决于'组合'的大小。 'any(sum(i)...'是一个生成器表达式,不需要在评估前计算所有的值。 – 2012-04-22 03:51:29
不是字典,但您可以构建所有组合并检查您的值是否在该集合中。
import itertools
def pairSum(data, value):
return value in set(map(sum, itertools.combinations(data, 2)))
如果列表不包含零或负值,你可以保持仅比列表中的目标下的值,因为在列表中总结的价值相等或更高,以别的不匹配:
import itertools
def pairSum(data, value):
data = [v for v in data if v < value]
return value in set(map(sum, itertools.combinations(data, 2)))
- 1. Python函数的字典
- 2. 函数参数到python字典
- 3. Python字典遍历特定操作/函数的嵌套字典
- 4. 通过字符串输入与字典numpy数组Python的eval函数与字典
- 5. 交流与字典的Python
- 6. 字典与元组的Python
- 7. Python赋值函数字典值
- 8. python socket函数返回字典
- 9. 在字典中存储函数[Python]
- 10. Python函数猜测游戏字典
- 11. Python与多个字典组织数据
- 12. Python函数的参数范围(字典v字符串。)
- 13. 返回python中函数的数字字典
- 14. 如何编写将字典拆分为字典数组的递归Python函数?
- 15. python - 比较值与字典
- 16. 解析字典,并与Python
- 17. 使用scipy.integrate.odeint与字典[Python]
- 18. 与Python嵌套字典
- 19. Swift函数中的字典
- 20. 的Python:计数字典
- 21. 将numba的字典类型替换为python函数的参数
- 22. Python中是否有字典解析? (函数返回字典的问题)
- 23. 的Python - 字典
- 24. 的Python:字典
- 25. Python 2.7搜索字典A与字典B中的键
- 26. python调用带字典参数的函数
- 27. 如何在Python函数中获取命名参数的字典
- 28. 词典到Python的字典
- 29. Python中的字典词典!
- 30. python词典的字典
也许你应该澄清一下列表是否有*对*号或只有*单*号。 – 2012-04-22 03:19:57
我原来的功能有个别的数字,我试图用字典来实现相同的基本功能。 – 2012-04-22 03:34:45