鱼C论坛

 找回密码
 立即注册
查看: 8983|回复: 45

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

[复制链接]
发表于 2017-11-20 19:00:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2017-11-26 20:15 编辑

先我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。


题目:

已有一个没有重复的整数列表,如 [2, 10, -3, 9, 4, 3, 5, 7 ,12],有一个整数目标值,如9

这个目标值可能可以由列表中两个数字相加得到,如 2 + 7,-3 + 12, 4 +5

建立一个函数

def fun(mylist, target):
    return 列表

要求返回的列表为如下形式:

[[2, 7], [-3, 12], [4, 5]]

如果仅有一个返回

[2, 7]

如果没有返回

[]

注:不要有重复的,如[2, 7]和[7, 2]

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-11-20 20:15:15 | 显示全部楼层
本帖最后由 SixPy 于 2017-11-20 20:28 编辑
def fun(ls, target):    
    return [[ls[x],ls[y]]for x in range(len(ls))
                         for y in range(x+1,len(ls))
                         if ls[x]+ls[y]==target]

ls = [2, 10, -3, 9, 4, 3, 5, 7 ,12]
print(fun(ls, 9))
#[[2, 7], [-3, 12], [4, 5]]
import numpy as np
a = np.array([2, 10, -3, 9, 4, 3, 5, 7 ,12])
idx = np.where(np.triu(a+a.reshape(-1,1),1)==9)
print(np.array([a[idx[0]],a[idx[1]]]).T.tolist())

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-20 20:50:22 | 显示全部楼层
本帖最后由 第四时空 于 2017-11-20 20:59 编辑
def fun(mylist, target):
    mylist = sorted(mylist)
    result = []
    for i in range(0, len(mylist)):
        if mylist[i] > target / 2:
            break
        for j in range(i + 1, len(mylist)):
            if mylist[i] + mylist[j] > target:
                break
            if mylist[i] + mylist[j] == target:
                result.append([mylist[i], mylist[j]])
    return result[0] if len(result) == 1 else result

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-20 20:53:18 | 显示全部楼层
两两组合,没有重复的列表···故意的嘛
import itertools as it

def fun(mylist, target):
    return [list(i) for i in it.combinations(mylist, 2) if sum(i) == target]
手动做的话,嵌套循环是笛卡尔积,
要排除掉自己加自己,还有位置相反的重复
def fun2(mylist, target):
    return [list(k) for k in
            {frozenset([i,j]) for i in mylist for j in mylist if i!=j and i+j==target}]

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-20 22:48:29 | 显示全部楼层
# 使用itertools库
def fun(mylist, target):
    from itertools import combinations
    result = [list(i) for i in combinations(mylist,2) if sum(i)==target]
    if len(result) == 1:
        return result[0]
    return result
# 不使用itertools库
def fun(mylist, target):
    result = []
    for i in mylist:
        if (target - i) in mylist and mylist.index(i)<mylist.index(target-i):
            result.append([i,target-i])
    if len(result) == 1:
        return result[0]
    return result

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-21 08:49:58 | 显示全部楼层
>>> a=[]
>>> for i in range(len(l)):
        for j in range(i,len(l)):
                if (l[i]+l[j]==9):
                        a.append([l[i],l[j]])                        
>>> a
[[2, 7], [-3, 12], [4, 5]]

评分

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

查看全部评分

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

使用道具 举报

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

点评

list1定义在函数外边,如果运行几次函数会把多次的结果放在一起。  发表于 2017-11-26 20:24

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 list1定义在函数外边,如果运行几次函数会.

查看全部评分

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

使用道具 举报

发表于 2017-11-21 11:14:36 | 显示全部楼层
mark
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-21 14:31:52 | 显示全部楼层
def fun(mylist,target):
    result = []
    for i in range(len(mylist)):
        for each in mylist[i + 1:]:
            if target == mylist[i] + each:
                temp = [mylist[i], each]
                result.append(temp)
                #mylist.remove(each)
    return result

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-21 14:34:38 | 显示全部楼层
def fun(ls, target):
    result = []
    for i in range(len(ls)-1):
        for j in range(i+1, len(ls)):
            if ls[i] + ls[j] == target:
                result.append([ls[i], ls[j]])

    if len(result) == 1:
        return result[0]
    else:
        return result

list1 = [2, 10, -3, 9, 4, 3, 5, 7 ,12]
print(fun(list1, 9))
[[2, 7], [-3, 12], [4, 5]]

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-21 15:37:14 | 显示全部楼层
def fun(mylist,target):
    length = len(mylist)
        
    newlist = []
    for i in range(length):
        for j in range(length):
            if target == mylist[i] + mylist[j]:
                newlist.append([mylist[i],mylist[j]])
                mylist[i] = True
    return newlist
  
mylist=[2,10,-3,9,4,3,5,7,12]
target = 9
print(fun(mylist,target))

点评

你看看把12,14行再运行一遍是什么结果  发表于 2017-11-26 20:30

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-21 19:40:24 | 显示全部楼层
def fun(mylist,target):
    returnedlist = []
    for each in mylist:
        for each1 in mylist:
            if each+each1 == target:
                returnedlist.append([each,each1])
    return returnedlist

点评

有重复结果  发表于 2017-11-26 20:31

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-21 20:47:28 | 显示全部楼层
本帖最后由 口可口可 于 2017-11-27 22:10 编辑
def fun(mylist, target):
    result_list = []
    mylist.sort()

    for index1 in range(len(mylist)-1):
        for index2 in range(index1+1, len(mylist)):
            if mylist[index1] + mylist[index2] >= target:
                if mylist[index1] + mylist[index2] == target:
                    result_list.append([mylist[index1], mylist[index2]])
                else:
                    break

    if len(result_list) == 1:
        return result_list[0]
    else:
        return result_list

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-21 22:17:08 | 显示全部楼层
def fun(a,target):
            answer=[]
            for i in range(len(a)):
                        for j in range(i):
                                    if i !=j and a[i]+a[j]== target :
                                                answer.append([a[i],a[j]])
            return print(answer)
                                                
fun([2, 10, -3, 9, 4, 3, 5, 7 ,12],9)

点评

return print的写法不合适  发表于 2017-11-26 20:33

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-21 23:24:04 | 显示全部楼层
def fun (mylist,target):
    un=0
    nilist=[]
    while un < len(mylist):
        for i in range(len(mylist)):
            if i > un:
                a=int(mylist[i])
                c=a+int(mylist[un])
                if c == target:
                   element=[a,mylist[un]]
                   nilist.append(element)            
        un += 1
    return nilist

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-22 01:57:51 | 显示全部楼层
本帖最后由 yjsx86 于 2017-11-24 03:12 编辑
L = [2, 10, -3, 9, 4, 3, 5, 7 ,12]
def func(mylist, target):
    newlist = mylist[:]
    rs = []
    for i in mylist:
        for j in newlist:
            if i + j == target:
                rs.append([i,j])
        newlist.remove(i)
    return rs[0] if len(rs) == 1 else rs

#测试代码
for x in range(10):
    r = func(L,x)
    print(r)

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-11-22 10:27:18 | 显示全部楼层
我还是个初学者,这个有点难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 11:10:29 | 显示全部楼层
l1 = [2, 10, -3, 9, 4, 3, 5, 7 ,12]
l2 = []
def func(mylist,target):
    while True:
        num1 = mylist.pop()
        for i in mylist:
            if num1 + i == target:
                l2.append([num1, i])
        if not(len(mylist)):
            break
    print(l2)

func(l1,23)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 再次调用函数出错

查看全部评分

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

使用道具 举报

发表于 2017-11-22 12:35:55 | 显示全部楼层
貌似参考不到其他人的答案呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-22 15:07:49 | 显示全部楼层
本帖最后由 sunboyabc 于 2017-11-22 16:12 编辑

def function1(list1=[2, 10, -3, 9, 4, 3, 5, 7 ,12],target=9):
    len1 = len(list1)
    for i1 in range(len1):
        for i2 in range(i1+1,len1):
            if list1[i1] + list1[i2] ==9 :
                print([list1[i1],list1[i2]])
           else:
                print([])

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 03:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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