鱼C论坛

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

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

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

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

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

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

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

示例如下:
permutations('a'); # ['a']
permutations('ab'); # ['ab', 'ba']
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 | 显示全部楼层
可以用库就太简单了
from itertools import permutations as p
def permutations(strings):
    return list(set([''.join(i) for i in p(strings, len(strings))]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 10:52:59 | 显示全部楼层
def per(string):
    import itertools
    t = list(itertools.permutations(string))
    newset = set()
    for i in t:
        a = ''.join(i)
        newset.add(a)
    print(list(newset))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 10:59:52 | 显示全部楼层
不用库,递归实现
def permutations(strings, lst=['']):
    if strings == '':
        return lst
    else:
        new = set()
        for i in lst:
            for j in range(len(i) + 1):
                new.add(i[:j] + strings[0] + i[j:])
        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 编辑

这个用工具简直就是现成的
import itertools
def permutations1(s):
    return list({"".join(i) for i in itertools.permutations(s,len(s))})
不用库,自己试做
def permutations2(s):
    num = len(s)
    s_num = {i:s.count(i) for i in s}
    
    the_i = ['x'+str(i) for i in range(num)]
    the_for = [' for ']*num # 注意保留空格
    the_s = [' in s']*num
   
    a = ("["+ "+".join(the_i) + " ".join(["".join(k[0])+k[1] for k in zip(zip(the_for,the_i),the_s)])+"]")
    a = set(eval(a,{'s':s}))
    
    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 | 显示全部楼层
import itertools


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

使用道具 举报

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

使用道具 举报

发表于 2019-8-18 16:01:52 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2019-8-18 16:05 编辑
from itertools import permutations
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, 2025-1-18 12:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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