鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 126

[复制链接]
发表于 2017-11-22 19:46:05 | 显示全部楼层
  1. mylist = [2, 10, -3, 9, 4, 3, 5, 7 ,12]
  2. target = 9

  3. def fun(mylist, target):
  4.     result = []
  5.     for each in mylist:
  6.         mylist.remove(each)
  7.         for each2 in mylist:
  8.             if each + each2 == target:
  9.                 result.append([each, each2])
  10.                 mylist.remove(each2)
  11.     return result


  12. if __name__ == "__main__":
  13.     result = fun(mylist, target)
  14.     print(result) #[[2, 7], [-3, 12], [4, 5]]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 无法多次运行函数

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 11:13:23 | 显示全部楼层
def fun(mylist,target):
    slist = []
    for i in range(len(mylist)):
        for j in range(i+1,len(mylist)):
            if mylist[i] + mylist[j] == target:
                slist.append ([mylist[i],mylist[j]])
      
    return slist

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 14:43:30 | 显示全部楼层
def sss(a):
    for i in a:
         s=[]
         for d in a:
             if i+d==9:
                s.append(i)
                s.append(d)
                yield (s)

a=[2, 10, -3, 9, 4, 3, 5, 7 ,12]
l=list(sss(a))
print(l)
x=[]
for i in l:
    i.sort()
print(l)
s=[]
for i in l:
    if i not in s:
        s.append(i)
print(s)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 18:53:49 | 显示全部楼层
  1. def fun(mylist,target):
  2.     list1 = []
  3.     for i in mylist:
  4.         a = target - i
  5.         if a in mylist:
  6.             lst = [i,a]
  7.             list1.append(lst)
  8.             mylist.remove(a)
  9.     print(list1)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 无法重复运行函数

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-25 09:29:40 | 显示全部楼层
import itertools
l= [2, 10, -3, 9, 4, 3, 5, 7 ,12]

def fun(mylist, target):
    import itertools
    r=[]
    list1=itertools.combinations(mylist,2)
    for i in list1:
        if i[0]+i[1]==target:
            r.append(list(i))
    if len(r)==1:
        return r[0]
    return r

print(fun(l,9))

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-25 20:50:09 | 显示全部楼层
本帖最后由 铁棍阿童木 于 2017-11-25 20:52 编辑

# 首先定义列表
mylist = [2, 10, -3, 9, 4, 3, 5, 7, 12]


# 由用户自行输入目标数值
while True:
    try:
        target = int(input("请输入目标数值:"))
        break
    except TypeError:
        print("输入错误,必须输入整数!")


def fun(mylist, target):

    # 创建空列表,用来存放符合条件的元素组成的二级列表
    obj_list = []

    # 创建空列表,用来存放已经计算过的数值
    repeat = []

    # 获得列表长度范围,启动for循环进行比对计算
    list_len = len(mylist)
    for x in range(list_len):

        # 如果两数的差在mylist列表,
        # 如果两数的差不在repeat列表,同时两数的差不等于自身,则执行添加操作
        if (target - mylist[x]) in mylist:
            if (target - mylist[x]) not in repeat and (
                target - mylist[x]) != mylist[x]:
                temp_list = list((mylist[x],(target - mylist[x])))
                obj_list.append(temp_list)
            repeat.append(mylist[x])
    return obj_list
11.png

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 00:09:11 | 显示全部楼层
  1. def fun(mylist,target):
  2.     list_result = []
  3.     for i in mylist:
  4.         for j in mylist[mylist.index(i)+1:]:
  5.             if i+j == target:
  6.                 list_result.append([i,j])
  7.     return list_result
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-27 15:58:39 | 显示全部楼层
def fun(mylist,target):
    result = []
    mylist.sort()
    high = target - mylist[0]
    list1 = mylist[:mylist.index(high)+1]
    len1 = 0
    len2 = -1
    while  list1[len1]-list1[len2]:
        if target-list1[len1]==list1[len2]:
            result.append([list1[len1],list1[len2]])
            len1 += 1
            len2 -= 1
            continue
        elif target-list1[len1] > list1[len2]:
            len1 += 1
            continue
        elif target-list1[len1] < list1[len2]:
            len2 -= 1
            continue
    if len(result) == 1:
        return result[0]
    else : return result
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-27 16:37:26 | 显示全部楼层
  1. def fun(mylist,target):
  2.     result_list = []
  3.     for x in mylist:
  4.         for y in mylist:
  5.             if x + y == target and x != y and sorted([x,y]) not in result_list:
  6.                 result_list.append(sorted([x,y]))
  7.     return result_list
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-27 16:40:02 | 显示全部楼层
本帖最后由 shigure_takimi 于 2017-11-27 17:30 编辑

做出来有重复,删了重做。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-28 09:32:54 | 显示全部楼层
本帖最后由 sunnychou 于 2017-11-28 09:36 编辑

def fun(mylist, target):
    c = []
    if mylist == []:
        return []
    for i in mylist:
        if (target - i) in mylist:
            c.append([i, target - i])
            mylist.remove(i)
            mylist.remove(target - i)
    if len(c) == 2:
        return c
    else:
        return c

     
mylist = [2, 10, -3, 9, 4, 3, 5, 7 ,12]
print(fun(mylist, 9))[/code]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-28 09:42:59 | 显示全部楼层
  1. def fun(mylist, target):
  2.     c = []
  3.     if mylist == []:
  4.         return []
  5.     for i in mylist:
  6.         if (target - i) in mylist:
  7.             c.append([i, target - i])
  8.             mylist.remove(i)
  9.             mylist.remove(target - i)
  10.     if len(c) == 1:
  11.         return c[0]
  12.     else:
  13.         return c
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-28 11:01:52 | 显示全部楼层
  1. def fun(mylist,target):
  2.     listForCheck = []
  3.     listForReturn = []
  4.     for i in mylist:
  5.         mylist.remove(i)
  6.         if target - i in mylist and i not in listForCheck and target - i not in listForCheck:
  7.             listForReturn.append([i, target - i])
  8.         listForCheck.append(i)
  9.         listForCheck.append(target - i)
  10.     return listForReturn
  11. print(fun([2, 10, -3, 9, 4, 3, 5, 7 ,12],9))
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-29 09:55:06 | 显示全部楼层
def fun(mylist,target):
    temps={}
    for i in range(len(mylist)-1):
        for j in range(i+1,len(mylist)):
            if (mylist[i]+mylist[j])==target:
                dict_0={mylist[i]:mylist[j]}
                temps.update(dict_0)
    temps=list(temps.items())
    for m in range(len(temps)):
        temps[m]=list(temps[m])
    return temps


mylist=[2,10,-3,9,4,3,5,7,12]
target=9
result=fun(mylist,target)
print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-17 17:33:11 | 显示全部楼层
  1. def fun(mylist, target):
  2.     out = []
  3.     for i in range(len(mylist)):
  4.         for j in range(i + 1, len(list1)):
  5.             if mylist[i] + mylist[j] == target:
  6.                 out.append([mylist[i], mylist[j]])
  7.     return out

  8. list1 = [2, 10, -3, 9, 4, 3, 5, 7, 12]
  9. goal = 9
  10. print(fun(list1, goal))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 22:34:20 | 显示全部楼层
  1. def find(list,tar):
  2.     L=[]
  3.     for i in list:
  4.         for j in list:
  5.             if i<j and i+j==tar:
  6.                L.append([i,j])
  7.     return L
  8. tar=9
  9. a= [2, 10, -3, 9, 4, 3, 5, 7 ,12]
  10. print(find(a,tar))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-6 08:50:02 | 显示全部楼层
solomonxian 发表于 2017-11-20 20:53
两两组合,没有重复的列表···故意的嘛

手动做的话,嵌套循环是笛卡尔积,

自己加自己是没有想到的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-6 09:01:30 | 显示全部楼层
def fun(mylist, target):
    outlist = []
    for each in mylist:
        if target - each in mylist:
            outlist.append([each, (target - each)])
            mylist.remove(each)
            mylist.remove(target - each)
    return outlist
fun([2, 10, -3, 9, 4, 3, 5, 7 ,12, 12, 56], 9)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-18 20:26:57 | 显示全部楼层
  1. from itertools import permutations as per

  2. def fun126(list1,tar):
  3.     return list(set([tuple(sorted(list(each))) for each in per(list1,2) if tar==sum(each)]))

  4. list1 = [2, 10, -3, 9, 4, 3, 5, 7 ,12]
  5. print(fun126(list1,9))
复制代码

   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 13:07:18 | 显示全部楼层
不很符合要求,返回的是元素为元组的集合,而且即使只有一个也会返回集合内元组的形式……
  1. def func(lis,num):return {tuple(sorted((i,j)))for i in lis for j in lis if i+j==num and i!=j}
复制代码
  1. func([2, 10, -3, 9, 4, 3, 5, 7 ,12],9)#{(2, 7), (-3, 12), (4, 5)}
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 16:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表