鱼C论坛

 找回密码
 立即注册
查看: 4853|回复: 21

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

[复制链接]
发表于 2017-6-7 09:31:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ooxx7788 于 2017-6-7 19:34 编辑

排列组合给定的字符串,返回无重复结果的列表。(这题居然有4kyu,我估计不用库或者其他语言能有4kyu吧)

示例如下:
  1. permutations('a'); # ['a']
  2. permutations('ab'); # ['ab', 'ba']
  3. permutations('aabb'); # ['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']
复制代码


好吧,题目不难,大家试试吧!

游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-6-7 09:35:54 | 显示全部楼层
先沙发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-7 09:38:00 | 显示全部楼层

我答案都还没放上去呢,沙发有什么用!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 10:36:24 | 显示全部楼层
python 不是有现成的嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 10:38:33 | 显示全部楼层
可以用库就太简单了
  1. from itertools import permutations as p
  2. def permutations(strings):
  3.     return list(set([''.join(i) for i in p(strings, len(strings))]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 10:52:59 | 显示全部楼层

  1. def per(string):
  2.     import itertools
  3.     t = list(itertools.permutations(string))
  4.     newset = set()
  5.     for i in t:
  6.         a = ''.join(i)
  7.         newset.add(a)
  8.     print(list(newset))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 10:59:52 | 显示全部楼层
不用库,递归实现
  1. def permutations(strings, lst=['']):
  2.     if strings == '':
  3.         return lst
  4.     else:
  5.         new = set()
  6.         for i in lst:
  7.             for j in range(len(i) + 1):
  8.                 new.add(i[:j] + strings[0] + i[j:])
  9.         return permutations(strings[1:], list(new))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2017-6-7 20:23:49 | 显示全部楼层
jerryxjr1220 发表于 2017-6-7 10:59
不用库,递归实现

看不懂,能给解释下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 20:23:49 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-7 21:13:40 From FishC Mobile | 显示全部楼层
lst50 发表于 2017-6-7 20:23
看不懂,能给解释下吗?

假设我有一个字符串'abc'需要全排列,代入到函数中permutations(strings='abc',lst=[''])
整个的strings对应lst列表的变化应该是:
'abc'  ['']
'bc'  ['a']
'c'  ['ba','ab']
''  ['cba','bca','bac','cab','acb','abc']
其实就是拿strings中的第一个字符依次插入到lst列表中的每个字符串中,直到strings为空,返回lst列表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-6-7 21:21:39 | 显示全部楼层
jerryxjr1220 发表于 2017-6-7 21:13
假设我有一个字符串'abc'需要全排列,代入到函数中permutations(strings='abc',lst=[''])
整个的strings ...

谢谢,GET到了。解释的简单明了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-8 08:36:24 | 显示全部楼层
大叔大叔,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-11 16:59:50 | 显示全部楼层
支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-21 18:51:20 | 显示全部楼层
本帖最后由 solomonxian 于 2017-7-21 18:53 编辑

这个用工具简直就是现成的
  1. import itertools
  2. def permutations1(s):
  3.     return list({"".join(i) for i in itertools.permutations(s,len(s))})
复制代码

不用库,自己试做
  1. def permutations2(s):
  2.     num = len(s)
  3.     s_num = {i:s.count(i) for i in s}
  4.    
  5.     the_i = ['x'+str(i) for i in range(num)]
  6.     the_for = [' for ']*num # 注意保留空格
  7.     the_s = [' in s']*num
  8.    
  9.     a = ("["+ "+".join(the_i) + " ".join(["".join(k[0])+k[1] for k in zip(zip(the_for,the_i),the_s)])+"]")
  10.     a = set(eval(a,{'s':s}))
  11.    
  12.     return [i for i in a if {j:i.count(j) for j in i}==s_num]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-2 09:12:36 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-2 20:49:03 | 显示全部楼层
  1. import itertools


  2. def permutation(string):
  3.     lst = []
  4.     for i in range(1, len(string) + 1):
  5.         lst.extend(list(itertools.permutations(string, i)))
  6.     return lst
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-12 09:40:44 | 显示全部楼层
kankan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-18 16:01:52 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2019-8-18 16:05 编辑
  1. from itertools import permutations
  2. def func(string):return{''.join(i)for i in permutations(string)}
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-14 16:20:09 | 显示全部楼层
import itertools

def perm_fun(s):
    return list(itertools.permutations(s))

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

使用道具 举报

发表于 2020-6-15 02:39:53 | 显示全部楼层
from itertools import permutations as p
list1 =[]
def permutations(strings):
    for i in p(strings,len(strings)):
        list1.append(''.join(i))
    b = set(list1)   
    print(b)
strings = 'aabb'
print(permutations(strings))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 18:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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