鱼C论坛

 找回密码
 立即注册
查看: 3878|回复: 18

[技术交流] Python:每日一题 239(答题有奖)

[复制链接]
发表于 2019-9-16 22:27:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 zltzlt 于 2019-9-20 21:00 编辑

今天的题目:


给定一组不含重复元素的整数列表 nums,返回该列表所有可能的子列表。

说明:结果不能包含重复的子列表。

示例:

输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]



解法 1:

  1. def fun(num: list):
  2.     from itertools import combinations as c
  3.     result = []
  4.     for i in range(len(num) + 1):
  5.         result.extend(c(num, i))
  6.     return [list(a) for a in result]
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-9-16 23:34:38 | 显示全部楼层
本帖最后由 小小.甲鱼 于 2019-9-16 23:36 编辑

  1. nums = [1, 2, 3, 4]

  2. result = []
  3. for i in range(pow(2, len(nums))):
  4.     tmp = []
  5.     for index,num in enumerate(nums):
  6.         if i & (1<<index):
  7.             tmp.append(num)
  8.     result.append(tmp)

  9. print(result)
复制代码

点评

我很赞同!: 5.0
我很赞同!: 5
用 itertools 效率会更高  发表于 2019-9-17 20:32

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
zltzlt + 2 + 2 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-17 02:10:15 | 显示全部楼层
  1. class Solution:
  2.     def subsets(self, nums: List[int]) -> List[List[int]]:
  3.         res = []
  4.         self.helper(0,sorted(nums),[],res);
  5.         return res
  6.    
  7.     def helper(self,index: int, nums: List[int],lst: List[int],res: List[List[int]]):
  8.         res.append(lst)
  9.         for i in range(index,len(nums)):
  10.             self.helper(i+1,nums,lst + [nums[i]],res)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
zltzlt + 2 + 2 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-17 12:22:25 | 显示全部楼层
  1. def function(nums):
  2.     from itertools import combinations
  3.     res = []
  4.     for i in range(len(nums)+1):
  5.         for each in list(map(lambda x:list(x), combinations(nums, i))):
  6.             res.append(each)
  7.     return res

  8. print(function([1,2,3]))
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +2 收起 理由
zltzlt + 1 + 1 + 2

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-17 20:32:43 | 显示全部楼层

恭喜通过!

执行用时:52 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-17 20:33:22 | 显示全部楼层

通过!
执行用时:60 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-17 20:34:07 | 显示全部楼层

恭喜通过!

执行用时:60 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-17 21:54:00 | 显示全部楼层
完成,撒花~~
顺便还排了序
  1. def 求子集(母集):
  2.     全部子集 = [[]]
  3.     元素个数 = len(母集)
  4.     当前个数 = 1
  5.     while 当前个数 < 元素个数:
  6.         for each in 全部子集:
  7.             当前子集 = each[:]
  8.             if len(当前子集) == 当前个数-1:
  9.                 q=lambda:母集.index(当前子集[-1]) if len(当前子集) else 0
  10.                 for 元素 in 母集[q():]:
  11.                     if 元素 not in 当前子集:
  12.                         当前子集.append(元素)
  13.                         #print(当前子集, 全部子集,'测试')
  14.                         if 当前子集 not in 全部子集:
  15.                             全部子集.append(当前子集[:])
  16.                             #print(当前子集,'测试')
  17.                         else:
  18.                             continue
  19.                         当前子集.pop()
  20.             #print('if结束')
  21.         #print('for循环结束')
  22.         当前个数 += 1
  23.     全部子集.append(母集)
  24.     return 全部子集

  25. if __name__ == '__main__':
  26.     全体子集 = 求子集([1,2,3])
  27.     print('[')
  28.     for 子集 in 全体子集:
  29.         print(子集, ',',sep='')
  30.     print(']')
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-17 21:57:00 | 显示全部楼层
阴阳神万物主 发表于 2019-9-17 21:54
完成,撒花~~
顺便还排了序

我这,效率是不是有点低啊?
看别人代码好短……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 03:15:43 | 显示全部楼层
阴阳神万物主 发表于 2019-9-17 21:54
完成,撒花~~
顺便还排了序

你的为啥是中文的....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 19:16:26 | 显示全部楼层
小小.甲鱼 发表于 2019-9-18 03:15
你的为啥是中文的....

自定义的变量名啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 22:14:32 | 显示全部楼层

居然可以使用中文. 才知道!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-19 09:12:46 | 显示全部楼层
啦啦啦
  1. from itertools import permutations as pt

  2. def func(nums):
  3.           length = len(nums)
  4.           answer = []
  5.           for each in range(length):
  6.                     i = pt(nums,each)
  7.                     for a in i:
  8.                               a = list(a)
  9.                               a.sort()
  10.                               if a not in answer:
  11.                                         answer.append(a)
  12.           return answer
  13.          
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-19 09:38:14 | 显示全部楼层
  1. from itertools import combinations

  2. def fun239(x):
  3.     result = []
  4.     for i in range(len(x)+1):
  5.         for j in list(combinations(x,i)):
  6.             result.append(list(j))
  7.     return result
复制代码
  1. >>> fun239([1,2,3])
  2. [[], [1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-20 10:35:26 | 显示全部楼层
@zltzlt 很奇怪你的答案
  1. result.extend(list(c(num, i)))
复制代码
你既然已经用了extend了,为什么不
  1. result.extend(c(num, i))
复制代码
  1. result+=list(c(num, i))
复制代码
呢?

点评

我很赞同!: 5.0
我很赞同!: 5
嗯,这样也可以  发表于 2019-9-20 21:00

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-21 13:41:11 | 显示全部楼层
@zltzlt 其实我是想提醒你你的方法比较浪费……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-21 13:41:48 | 显示全部楼层
永恒的蓝色梦想 发表于 2019-9-21 13:41
@zltzlt 其实我是想提醒你你的方法比较浪费……

已经改了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-11 03:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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