ooxx7788 发表于 2017-6-7 09:31:38

Python:每日一题 59

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

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

示例如下:
permutations('a'); # ['a']
permutations('ab'); # ['ab', 'ba']
permutations('aabb'); # ['aabb', 'abab', 'abba', 'baab', 'baba', 'bbaa']

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

**** Hidden Message *****

Kua.Max 发表于 2017-6-7 09:35:54

先沙发

ooxx7788 发表于 2017-6-7 09:38:00

Kua.Max 发表于 2017-6-7 09:35
先沙发

我答案都还没放上去呢,沙发有什么用!

SixPy 发表于 2017-6-7 10:36:24

python 不是有现成的嘛

jerryxjr1220 发表于 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))]))

酷学 发表于 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))

jerryxjr1220 发表于 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 + i)
      return permutations(strings, list(new))

lst50 发表于 2017-6-7 20:23:49

jerryxjr1220 发表于 2017-6-7 10:59
不用库,递归实现

看不懂,能给解释下吗?

小锟 发表于 2017-6-7 20:23:49

看看

jerryxjr1220 发表于 2017-6-7 21:13:40

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列表。

lst50 发表于 2017-6-7 21:21:39

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

谢谢,GET到了。解释的简单明了

sunnychou 发表于 2017-6-8 08:36:24

大叔大叔,{:10_254:}

lwb444 发表于 2017-6-11 16:59:50

支持

solomonxian 发表于 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)+k for k in zip(zip(the_for,the_i),the_s)])+"]")
    a = set(eval(a,{'s':s}))
   
    return

溯影 发表于 2018-3-2 09:12:36

学习一下

凌九霄 发表于 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

咕咕鸡鸽鸽 发表于 2019-1-12 09:40:44

kankan

永恒的蓝色梦想 发表于 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)}

holiday_python 发表于 2020-6-14 16:20:09

import itertools

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

print(perm_fun('abc'))

junsitu9159 发表于 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))
页: [1] 2
查看完整版本: Python:每日一题 59