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
先沙发
我答案都还没放上去呢,沙发有什么用! python 不是有现成的嘛 可以用库就太简单了
from itertools import permutations as p
def permutations(strings):
return list(set([''.join(i) for i in p(strings, len(strings))]))
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)) 不用库,递归实现
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)) jerryxjr1220 发表于 2017-6-7 10:59
不用库,递归实现
看不懂,能给解释下吗? 看看 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列表。 jerryxjr1220 发表于 2017-6-7 21:13
假设我有一个字符串'abc'需要全排列,代入到函数中permutations(strings='abc',lst=[''])
整个的strings ...
谢谢,GET到了。解释的简单明了 大叔大叔,{:10_254:} 支持 本帖最后由 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 学习一下 import itertools
def permutation(string):
lst = []
for i in range(1, len(string) + 1):
lst.extend(list(itertools.permutations(string, i)))
return lst kankan 本帖最后由 永恒的蓝色梦想 于 2019-8-18 16:05 编辑
from itertools import permutations
def func(string):return{''.join(i)for i in permutations(string)} import itertools
def perm_fun(s):
return list(itertools.permutations(s))
print(perm_fun('abc')) 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