如何打印 python 中所有可能的不同长度排列?
How to print all possible permutations of different lengths in python?
我正在尝试打印不同长度字符串的所有可能排列
我在做
def toString(List):
return ''.join(List)
def permute(string1, l, r):
if l == r:
print(toString(string1))
else:
for i in range(l, r + 1):
string1[l], string1[i] = string1[i], string1[l]
permute(string1, l + 1, r)
string1[l], string1[i] = string1[i], string1[l]
string = "ABC"
n = len(string)
a = list(string)
permute(a, 0, n-1)
但是 returns
美国广播公司
ACB
BAC
BCA
CBA
驾驶室
我想要它 return
A、B、C、AB、BC、AC、ABC、ACB、BAC 等
我做不到
你已经很接近了,你只需要在 permutate
周围再包装一个 for 循环并使用你的函数来计算所有子字符串的排列:
def toString(List):
return ''.join(List)
def permute(string1, l, r):
if l == r and r != 0:
print(toString(string1))
else:
for i in range(l, r + 1):
string1[l], string1[i] = string1[i], string1[l]
permute(string1, l + 1, r)
string1[l], string1[i] = string1[i], string1[l]
my_string = "ABC"
for s in my_string:
print(s)
for i,_ in enumerate(my_string):
n = len(my_string[:i+1])
a = list(my_string[:i+1])
permute(a, 0, n-1)
我猜您正在寻找字符串的所有可能子集而不是排列,如果是这样,那么您可以使用以下任何一种对您来说看起来很直观的方法
def permute(string1):
n = len(string1)
finalSet = ['']
def permutation(size, cur, k):
if len(cur) == size:
finalSet.append(''.join(cur))
return
for j in range(k, n):
permutation(size, cur + [string1[j]], j+1)
for i in range(1, n):
permutation(i, [], 0)
finalSet.append(string1)
return finalSet
print(permute("ABC"))
# Output : ['', 'A', 'B', 'C', 'AB', 'AC', 'BC', 'ABC']
另一种使用二进制数据创建子集的方法
# Short and simple approach
def permute(string1):
superSet = []
n = len(string1)
for i in range(2**n, 2**(n+1)):
seq = [x for x in bin(i)[3:]]
superSet.append(''.join([string1[j]
for j in range(n) if seq[j] == '1']))
return superSet
print(permute("ABC"))
# Output : ['', 'C', 'B', 'BC', 'A', 'AC', 'AB', 'ABC']
我正在尝试打印不同长度字符串的所有可能排列
我在做
def toString(List):
return ''.join(List)
def permute(string1, l, r):
if l == r:
print(toString(string1))
else:
for i in range(l, r + 1):
string1[l], string1[i] = string1[i], string1[l]
permute(string1, l + 1, r)
string1[l], string1[i] = string1[i], string1[l]
string = "ABC"
n = len(string)
a = list(string)
permute(a, 0, n-1)
但是 returns 美国广播公司 ACB BAC BCA CBA 驾驶室
我想要它 return A、B、C、AB、BC、AC、ABC、ACB、BAC 等
我做不到
你已经很接近了,你只需要在 permutate
周围再包装一个 for 循环并使用你的函数来计算所有子字符串的排列:
def toString(List):
return ''.join(List)
def permute(string1, l, r):
if l == r and r != 0:
print(toString(string1))
else:
for i in range(l, r + 1):
string1[l], string1[i] = string1[i], string1[l]
permute(string1, l + 1, r)
string1[l], string1[i] = string1[i], string1[l]
my_string = "ABC"
for s in my_string:
print(s)
for i,_ in enumerate(my_string):
n = len(my_string[:i+1])
a = list(my_string[:i+1])
permute(a, 0, n-1)
我猜您正在寻找字符串的所有可能子集而不是排列,如果是这样,那么您可以使用以下任何一种对您来说看起来很直观的方法
def permute(string1):
n = len(string1)
finalSet = ['']
def permutation(size, cur, k):
if len(cur) == size:
finalSet.append(''.join(cur))
return
for j in range(k, n):
permutation(size, cur + [string1[j]], j+1)
for i in range(1, n):
permutation(i, [], 0)
finalSet.append(string1)
return finalSet
print(permute("ABC"))
# Output : ['', 'A', 'B', 'C', 'AB', 'AC', 'BC', 'ABC']
另一种使用二进制数据创建子集的方法
# Short and simple approach
def permute(string1):
superSet = []
n = len(string1)
for i in range(2**n, 2**(n+1)):
seq = [x for x in bin(i)[3:]]
superSet.append(''.join([string1[j]
for j in range(n) if seq[j] == '1']))
return superSet
print(permute("ABC"))
# Output : ['', 'C', 'B', 'BC', 'A', 'AC', 'AB', 'ABC']