python - 如何找到总和为给定值的一对数字?
问题描述
我想编写一个函数,它接受一个不同的正整数列表和一个目标正整数值,然后返回一个整数对列表,其中每对总和为目标值。
这是我的代码,但它只显示一对数字:
def pairsum(list1, target):
for i in range(len(list1) -1):
for j in range(i + 1 ,len(list1)):
if list1[i]+ list1[j] == target:
return (list1[i], list1[j])
pairsum([3,2,6,1,5,4], 7)
当我调用pairsum([3,2,6,1,5,4], 7)
输出时(3,4)
应该是[(1,6), (2,5), (3,4)]
. 结果应按每个元组中第一个元素的升序排列。我不允许进口任何东西
解决方案
这是使用 itertools 的单行代码:
import itertools
def pairsum(vals, target):
return sorted([(a, b) for a, b in itertools.combinations(vals, 2) if a + b == target])
解释:
itertools.combinations(vals, 2)
创建所有 2 元素组合- “如果”部分将它们过滤成总和为目标的组合
- 接受的组合被组合成一个最终排序的元组列表(按每个元组的第一个元素)
推荐阅读
- ionic-framework - Ionic 3 网格大小不适应较小的屏幕
- python - 如何在 Flask 中访问重定向 URI 中的参数?
- angular - ag-grid Angular:使用Cell Render时将参数传递给组件?
- python - 优化将列表的列拆分为单独的列
- javascript - 通过鼠标悬停突出显示具有重复名称的圆圈
- php - 如何使用从数据库导入的值
- node.js - 从nodejs添加alexa技能会话属性
- react-native - React Native 构建错误(AccessibilityInfo 不存在)
- java - 打印字符串递归中的 \n 和 %n (Java)
- c# - 如何从组合框的数据源中提取密钥