我正在尝试获取字符串的所有子序列。例如: -
firstString = "ABCD"
O / P应该是;
'ABCD', 'BCD', 'ACD', 'ABD', 'ABC', 'CD', 'BD', 'BC', 'AD', 'AC', 'AB', 'D', 'C', 'B', 'A'
为此,我使用以下部分代码: -
#!usr/bin/python
from __future__ import print_function
from operator import itemgetter
from subprocess import call
import math
import itertools
import operator
call(["date"])
firstArray = []
firstString = "ABCD"
firstList = list(firstString)
for L in range(0, len(firstList)+1):
for subset in itertools.combinations(firstList, L):
firstArray.append(''.join(subset))
firstArray.reverse()
print (firstArray)
call(["date"])
但是这段代码不可扩展。
如果我提供: -
firstString = "ABCDABCDABCDABCDABCDABCDABCD"
该计划需要将近6分钟的时间才能完成。
----------------运行脚本时捕获--------------------
python sample-0012.py
Wed Feb 8 21:30:30 PST 2017
Wed Feb 8 21:30:30 PST 2017
有人可以帮忙吗?
答案 0 :(得分:0)
您正在寻找的是“电源组”(或Powerset)。 维基百科def:
任何集合的幂集(或powerset)S是S的所有子集的集合, 包括空集和S本身。
一个好的解决方案可能是递归的,在这里你可以找到一个: link
答案 1 :(得分:0)
为了更好地处理powerset概念, How to get all possible combinations of a list’s elements?
otherwise, you can do like this.
wordlist = []
for i in range(len(firststring)):
...: comblist = combinations(list(firststring), i+1)
...: same_length_words = []
...: for i, word in enumerate(comblist):
...: if word not in same_length_words:
...: same_length_words.append(word)
...: for each_word in same_length_words:
...: wordlist.append(''.join(each_word))
...:
答案 2 :(得分:0)
试试这个
from itertools import chain, combinations
firstString = 'ABCD'
data = list(firstString)
lists = chain.from_iterable(combinations(data, r) for r in range(len(data)+1))
print [''.join(i) for i in lists if i]
# ['A', 'B', 'C', 'D', 'AB', 'AC', 'AD', 'BC', 'BD', 'CD', 'ABC', 'ABD', 'ACD', 'BCD', 'ABCD']
答案 3 :(得分:0)
使用递归->选择和不选择概念
您必须做出一个决定,就是要选择要添加到字符串中的元素还是不添加到字符串中。基于这种方法,我们有了此递归解决方案。
def subse(string,current,index,n):
if index == n:
print(current)
return;
else:
subse(string,current+string[index],index+1,n) #pick element and add it to output string that is current
subse(string,current,index+1,n) #don't pick
if __name__ == "__main__":
subse('abc','',0,3)