鱼C论坛

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

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

[复制链接]
发表于 2019-9-18 21:53:28 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 zltzlt 于 2019-9-22 20:40 编辑

今天的题目:


给定一个可包含重复数字的序列,返回所有不重复的全排列


提示:还是 itertools。

难度:★★☆☆☆


示例:

输入: [1,1,2]
输出:
[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]



欢迎大家一起答题!


我的解法:

  1. def fun(nums):
  2.     from itertools import permutations as p
  3.     return list(set(list(p(nums, len(nums)))))
复制代码

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2019-9-18 22:24:07 | 显示全部楼层
本帖最后由 小小.甲鱼 于 2019-9-18 22:28 编辑

官方文档介绍. 长度r元组,所有可能的排列,无重复元素
但是不知道为啥. 我的还是返回了一个重复的list
所以使用了 list(set())的方式去去重


不知道 这种偷懒的写法行不 嘻嘻嘻
  1. import itertools

  2. s = [1,1,2]
  3. print(list(set(itertools.permutations(s, 3))))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-9-18 22:39:54 | 显示全部楼层
  1. import itertools


  2. def answer(lst):
  3.     return list(map(list, set(itertools.permutations(lst, len(lst)))))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 22:41:02 | 显示全部楼层
  1. def set_function(self, nums):
  2.     ans = [[]]
  3.     for n in nums:
  4.         ans = [j[:i] + [n] + j[i:]
  5.                  for j in ans
  6.                  for i in xrange((j + [n]).index(n) + 1)]
  7.     return ans
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-9-18 22:54:36 | 显示全部楼层
  1. import itertools
  2. def fun(nums):
  3.     return [list(i) for i in list(set(itertools.permutations(nums)))]

  4. nums = [1,1,2]
  5. print(fun(nums))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-9-18 23:47:22 | 显示全部楼层
总算碰到简单点的习题了。
  1. import itertools
  2. f = lambda ls : [list(i) for i in list(set(itertools.permutations(ls,3)))]
  3. f([1,1,2])
复制代码

点评

我很赞同!: 4.0
我很赞同!: 4
把 3 改成 len(ls) 会更好哦  发表于 2019-9-20 21:09
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-20 04:52:01 | 显示全部楼层
  1. import itertools

  2.    
  3. list1=input('输入元素,以“,”隔开:')
  4. list1=list(list1.split(','))
  5. list2=[]
  6. length = len(list1)
  7. for index in range(length):
  8.     list1[index]=int(list1[index])
  9. for each in itertools.permutations(list1,length):
  10.     each = list(each)
  11.     if each not in list2:
  12.         list2.append(each)
  13. print(list2)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-9-20 09:28:53 | 显示全部楼层
灵光一现,原来res是变量result的缩写啊。
版主新一期小技巧能不能盘点下常用变量命名,方便我们这些非专业的读代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-20 09:59:36 | 显示全部楼层
  1. from itertools import permutations

  2. def fun241(nums):
  3.     return [list(i) for i in set((permutations(nums)))]
复制代码
  1. >>> fun241([1,1,2])
  2. [[1, 2, 1], [2, 1, 1], [1, 1, 2]]
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2019-9-20 10:32:25 | 显示全部楼层
  1. def function(candidates):
  2.         from itertools import permutations as perm
  3.         return [
  4.                 list(i)
  5.                 for i in set(perm(candidates,len(candidates)))
  6.         ]
复制代码
好像和上面的一毛一样……

评分

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

查看全部评分

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

使用道具 举报

 楼主| 发表于 2019-9-20 21:04:06 | 显示全部楼层
小小.甲鱼 发表于 2019-9-18 22:24
官方文档介绍. 长度r元组,所有可能的排列,无重复元素
但是不知道为啥. 我的还是返回了一个重复的list
...

通过!

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

使用道具 举报

 楼主| 发表于 2019-9-20 21:06:19 | 显示全部楼层

通过!

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

使用道具 举报

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

通过!

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

使用道具 举报

 楼主| 发表于 2019-9-20 21:09:54 | 显示全部楼层
angtn 发表于 2019-9-18 23:47
总算碰到简单点的习题了。

通过!

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

使用道具 举报

 楼主| 发表于 2019-9-20 21:11:04 | 显示全部楼层

通过!

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

使用道具 举报

 楼主| 发表于 2019-9-20 21:12:04 | 显示全部楼层
永恒的蓝色梦想 发表于 2019-9-20 10:32
好像和上面的一毛一样……

通过!

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

使用道具 举报

发表于 2019-9-20 22:31:35 | 显示全部楼层
angtn 发表于 2019-9-18 23:47
总算碰到简单点的习题了。

有道理,感谢大佬指点,学习了。
  1. import itertools
  2. f = lambda ls : [list(i) for i in list(set(itertools.permutations(ls,len(ls))))]
  3. f([1,1,2])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-12 14:57:20 | 显示全部楼层
import itertools

lst = [1,2,3,4]
def answer(lst):
    return list(map(list, set(itertools.permutations(lst, len(lst)))))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-15 03:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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