鱼C论坛

 找回密码
 立即注册
查看: 4090|回复: 53

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

[复制链接]
发表于 2018-8-2 11:21:25 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 冬雪雪冬 于 2018-8-6 19:25 编辑

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

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
一组正整数,找出其中可以由这组数字中2个相加得到的,即与这组数字中2个相加相等的数字,例如:
[6, 18, 7, 17, 3, 2, 10, 20, 14, 4]
其中
6=2+4
7=3+4
17=3+14
10=7+3
20=17+3
14=10+4
返回6, 7, 17, 10, 20, 14

评分

参与人数 1荣誉 +1 收起 理由
永恒的蓝色梦想 + 1 老哥你忽略了18=14+4

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-8-2 12:01:13 | 显示全部楼层
本帖最后由 可乐必须加冰 于 2018-8-2 13:10 编辑

def f1(list1):
    list2 = []
    for i in list1:
        for j in list1:
            if i == j:
                continue
            for k in list1:
                if k == j:
                    continue
                if i == k + j:
                    list2.append(i)
    for num1 in set(list2):
        print(num1, end=" ")

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 12:06:37 | 显示全部楼层
本帖最后由 凌九霄 于 2018-8-2 12:25 编辑
  1. import itertools

  2. lst = [6, 18, 7, 17, 3, 2, 10, 20, 14, 4]
  3. intersection = list(set(lst) & set(map(sum, list(itertools.permutations(lst, 2)))))
  4. print(intersection)
  5. #[6, 7, 10, 14, 17, 18, 20]
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 12:48:02 | 显示全部楼层
  1. >>> def fun(ls):
  2.         import itertools as it
  3.         ts = [sum(e) for e in it.combinations(ls,2)]
  4.         return [x for x in ls if x in ts]

  5. >>> fun([6, 18, 7, 17, 3, 2, 10, 20, 14, 4])
  6. [6, 18, 7, 17, 10, 20, 14]
  7. >>> fun([2,3,4,5,6])
  8. [5, 6]
  9. >>>
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 13:10:02 | 显示全部楼层
  1. def aaa(list1):
  2.     n = []
  3.     for i in list1:
  4.         for j in list1:
  5.             for k in list1:
  6.                 if i == j + k:
  7.                     n.append(i)
  8.     return set(n)
  9. print(aaa([6,18,7,17,3,2,10,20,14,4]))

复制代码

点评

4不能由2个相加得到  发表于 2018-8-6 19:29
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-2 13:33:01 | 显示全部楼层
本帖最后由 天圆突破 于 2018-8-2 13:45 编辑
  1. >>> from itertools import combinations
  2. >>> lst = [6, 18, 7, 17, 3, 2, 10, 20, 14, 4]
  3. >>> list(filter(lambda x: x in map(lambda x:sum(x), combinations(lst,2)), lst))
  4. [6, 18, 7, 17, 10, 20, 14]
复制代码

版主你漏了个18=14+4

点评

的确漏了。  发表于 2018-8-6 19:29

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 13:44:32 | 显示全部楼层
def getSumNum(list0):
    d = len(list0)
    l = ""
    for i in range(d):
        for j in range(d):
            if j == i:
                pass
            else:
                for k in range(d):
                    if k == j:
                        pass
                    else:
                        if list0[i] == list0[j] + list0[k]:
                            if l == list0[i]:
                                pass
                            else:
                                l = list0[i]
                                print(l)

list1 = [6, 18, 7, 17, 3, 2, 10, 20, 14, 4]
getSumNum(list1)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 13:53:22 | 显示全部楼层
  1. def is_two_sum(num_list,n):     #判断num_list中是否有任意两个数之和为n
  2.     length = len(num_list)
  3.     for i in range(0,length-1):
  4.         for j in range(i+1,length):
  5.             if num_list[i]+num_list[j] == n:
  6.                 return True
  7.     return False
  8.    
  9. def fun193(int_list):
  10.     length = len(int_list)
  11.     result = []
  12.     for i in range(0,length):
  13.         smaller = []   
  14.         list1 = int_list[0:i] + int_list[i+1:length]    #去掉int_list[i]形成的列表
  15.         for each in list1:
  16.             if each < int_list[i]:
  17.                 smaller.append(each)            #比int_list小的数放入smaller列表中
  18.         if is_two_sum(smaller,int_list[i]):
  19.             result.append(int_list[i])
  20.     return result
  21.         

  22. print(fun193([6, 18, 7, 17, 3, 2, 10, 20, 14, 4]))
复制代码

  1. [6, 18, 7, 17, 10, 20, 14]
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 14:40:47 | 显示全部楼层
inta =[6, 18, 7, 17, 3, 2, 10, 20, 14, 4]
intb=[]
for i in range(len(inta)):
    intc=inta[i+1:]
    for j in intc:
        b=int(inta[i])+j
        if b in inta:
            intb.append(b)
print(list(set(intb)))

结果:
[6, 7, 10, 14, 17, 18, 20]

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 14:43:15 | 显示全部楼层
  1. def fun193(lst):
  2.          return (set([num + each for i,each in enumerate(lst) for num in lst[i + 1:] if each + num in lst]))
  3. fun193([6,18,7,17,3,2,10,20,14,4])
复制代码

评分

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

查看全部评分

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

使用道具 举报

头像被屏蔽
发表于 2018-8-2 14:43:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-2 14:44:11 | 显示全部楼层

为什么你的18没有?不是可以14+4么?

点评

漏掉了  发表于 2018-8-6 19:32
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-2 14:55:41 | 显示全部楼层
  1. def search(alist,lyst = set()):
  2.     alist.sort()
  3.     for i in range(2,len(alist)):
  4.         for j in range(i):
  5.             for k in range(j+1,i):
  6.                 if alist[j] + alist[k] == alist[i]:
  7.                     lyst.add(alist[i])
  8.                     break
  9.     return lyst

  10. alist = [6, 18, 7, 17, 3, 2, 10, 20, 14, 4]
  11. print(search(alist))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 15:22:54 | 显示全部楼层
  1. c = [6, 18, 7, 17, 3, 2, 10, 20, 14, 4]
  2. a = []

  3. for i in c:
  4.     for j in c:
  5.         if i != j:
  6.             num = i + j
  7.             if num in c:
  8.                 a.append(num)
  9. print(list(set(a)))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 15:34:25 | 显示全部楼层
  1. def num(x):
  2.     nums=[]
  3.     for index1 in range(len(x)):
  4.         for index2 in range(len(x)):
  5.             for index3 in range(len(x)):
  6.                 if index2==index3:
  7.                     pass
  8.                 else:
  9.                     if x[index1]==x[index2]+x[index3]:
  10.                         if x[index1] not in nums:
  11.                             nums.append(x[index1])
  12.     print(nums)
  13. num([6, 18, 7, 17, 3, 2, 10, 20, 14, 4])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-2 15:42:34 | 显示全部楼层
def test193(nums):


    last_index = 0
    next_index = 1

    if len(nums)<3:
        temp = '没有符合要求的'
        return temp
    else:
        temp = []
        nums.sort()
        last_index = 0
        #print(nums)

        while last_index < len(nums)-2:
            next_index = last_index + 1
            while next_index < len(nums)-1:
                if nums[last_index] + nums[next_index] in nums:
                    temp.append(nums[last_index] + nums[next_index])
                    #print(temp)
                    next_index += 1
                else:
                    next_index += 1
            last_index += 1
        temp = list(set(temp))
        return temp

        

print(test193([0,1]))
print(test193([6, 18, 7, 17, 3, 2, 10, 20, 14, 4]))   

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 15:51:18 | 显示全部楼层
def fun193(s):       
        res=[]
        for i in range(len(s)-1):
                for j in range(i+1,len(s)):
                        if s[i]+s[j] in s:
                                res.append(s[i]+s[j])
        return set(res)

s=[6, 18, 7, 17, 3, 2, 10, 20, 14, 4]
print(fun193(s))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 16:09:07 | 显示全部楼层
  1. import time
  2. def f(_list):
  3.     begin = time.time()
  4.     list0 = []
  5.     for i in _list:
  6.         for j in _list:
  7.             if i != j:
  8.                 for k in _list:
  9.                     if j != k and i == j + k and i not in list0:
  10.                         list0.append(i)
  11.     for i in list0:
  12.         print(i,end=',')
  13.     end = time.time()
  14.     print('程序运行时间:'+str(end-begin)+'秒')

  15. >>> f([6, 18, 7, 17, 3, 2, 10, 20, 14, 4])
  16. 6,18,7,17,10,20,14,程序运行时间:0.10613059997558594秒
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 16:46:14 | 显示全部楼层
def find_number(num_list):
    find_num = []
    save = []                         #用于暂时保存数据
    num = num_list.split(',')
    num = list(map(int, num))
    n = len(num)
    if n <= 2:
        return False
    for i in range(n):
        for j in range(n):
            if j == i:
                continue
            else:
                find = num[i] + num[j]
                if find in num:
                    save.append(find)
    if not len(save):                 # 如果不存在这样的数,返回False
        return False

    for each in num:
        if each in save:
            find_num.append(each)
    return find_num


a = input('请输入一组正整数【例如:4,5,8,9】:')
if not find_number(a):
    print('该数组中不存在可以由另外两个相加得到的数!')
else:
    print(find_number(a))


结果
请输入一组正整数【例如:4,5,8,9】:6,18,7,17,3,2,10,20,14,4
[6, 18, 7, 17, 10, 20, 14]

请输入一组正整数【例如:4,5,8,9】:2,4
该数组中不存在可以由另外两个相加得到的数!

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-8-2 18:45:57 | 显示全部楼层
  1. def fun193(x):
  2.     return sorted(list(set([t for t in[(x[i]+x[j]) for i in range(len(x)) for j in range(i+1,len(x))] if t in x])))
复制代码


18好像也在

点评

是的,我漏掉了  发表于 2018-8-6 19:34

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 10:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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