python – 使用给定的所有数字找到可以使用加法和减法生成的数字
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 使用给定的所有数字找到可以使用加法和减法生成的数字,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1275字,纯文字阅读大概需要2分钟。
内容图文
![python – 使用给定的所有数字找到可以使用加法和减法生成的数字](/upload/InfoBanner/zyjiaocheng/765/5f5588af8b744c02a41e8ce3cf14474c.jpg)
我已经分析了我的应用程序,它将90%的时间花在了plus_minus_variations上.
该函数找到了使用加法和减法给出各种数字列表的方法.
例如:
输入
1, 2
产量
1+2=3
1-2=-1
-1+2=1
-1-2=-3
这是我目前的代码.我认为它在速度方面可以得到很大改善.
def plus_minus_variations(nums):
result = dict()
for i, ops in zip(xrange(2 ** len(nums)), itertools.product([-1, 1], repeat=len(nums))):
total = sum(map(operator.mul, ops, nums))
result[total] = ops
return result
我主要是在寻找一种不同的算法来解决这个问题.我目前看来效率很低.但是,如果您对代码本身有优化建议,我也很乐意听到.
额外:
>如果结果错过了一些答案(或者有一些无关的答案),如果它完成得更快,那也没关系.
>如果有多种方法可以得到一个数字,那么其中任何一个都没问题.
>对于我正在使用的列表大小,99.9%的方式会产生重复的数字.
>如果结果没有产生数字的方式,那就好了,如果它再次完成得更快.
解决方法:
这对于大型随机列表来说似乎要快得多,我猜你可以进一步微优化它,但我更喜欢可读性.
我将列表分成小块并为其创建变体.由于你得到的数量少于2 ** len(chunk)variatons,它会更快.块长度为6,您可以使用它来查看最佳块长度.
def pmv(nums):
chunklen=6
res = dict()
res[0] = ()
for i in xrange(0, len(nums), chunklen):
part = plus_minus_variations(nums[i:i+chunklen])
resnew = dict()
for (i,j) in itertools.product(res, part):
resnew[i + j] = tuple(list(res[i]) + list(part[j]))
res = resnew
return res
内容总结
以上是互联网集市为您收集整理的python – 使用给定的所有数字找到可以使用加法和减法生成的数字全部内容,希望文章能够帮你解决python – 使用给定的所有数字找到可以使用加法和减法生成的数字所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。