Xin chào vì vậy tôi đang làm việc với Python và tôi đang cố gắng viết một phương pháp trong đó được đưa ra một chuỗi, nó sẽ tìm thấy mọi sự kết hợp của chuỗi đó và nối nó vào một danh sách. Tôi sẽ đưa ra chuỗi và hiển thị kết quả mà tôi muốn.
Chuỗi: x = 'god'
outcome:
lst = ['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
Một chữ cái chỉ có thể được sử dụng bởi số lần nó xuất hiện trên chuỗi được đưa ra, vì vậy nếu chuỗi của chúng tôi là 'god'
, 'gg'
hoặc 'goo'
, v.v. Nếu điều này có thể được thực hiện bằng cách sử dụng đệ quy sẽ rất tuyệt!
Styvane
57K17 Huy hiệu vàng147 Huy hiệu bạc151 Huy hiệu Đồng17 gold badges147 silver badges151 bronze badges
Đã hỏi ngày 5 tháng 3 năm 2015 lúc 5:31Mar 5, 2015 at 5:31
0
Sử dụng hoán vị:
from itertools import permutations
x = 'god'
perms = []
for i in range[1, len[x]+1]:
for c in permutations[x, i]:
perms.append["".join[c]]
print[perms]
# ['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
Đã trả lời ngày 5 tháng 3 năm 2015 lúc 5:37Mar 5, 2015 at 5:37
MarcinmarcinMarcin
185K12 Huy hiệu vàng158 Huy hiệu bạc222 Huy hiệu đồng12 gold badges158 silver badges222 bronze badges
Sử dụng
from itertools import permutations
x = 'god'
perms = []
for i in range[1, len[x]+1]:
for c in permutations[x, i]:
perms.append["".join[c]]
print[perms]
# ['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
0 và liệt kê toàn bộfrom itertools import permutations
x = 'god'
perms = []
for i in range[1, len[x]+1]:
for c in permutations[x, i]:
perms.append["".join[c]]
print[perms]
# ['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
0 and list comprehensionsfrom itertools import permutations
[''.join[j] for i in range[1,len[x] + 1] for j in permutations[x, i]]
Đầu ra
['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
Đã trả lời ngày 5 tháng 3 năm 2015 lúc 5:36Mar 5, 2015 at 5:36
styvanestyvanestyvane
57K17 Huy hiệu vàng147 Huy hiệu bạc151 Huy hiệu Đồng17 gold badges147 silver badges151 bronze badges
1
Đã hỏi ngày 5 tháng 3 năm 2015 lúc 5:31
>>> import itertools
>>> letters = 'god'
>>> combinations = []
>>> for i in range[len[letters]]:
... combinations.extend[
... [''.join[x] for x in itertools.permutations[letters, i + 1]]]
>>> print[combinations]
['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
Sử dụng hoán vị:Mar 5, 2015 at 5:33
Đã trả lời ngày 5 tháng 3 năm 2015 lúc 5:37
from itertools import permutations
x = 'god'
perms = []
for i in range[1, len[x]+1]:
for c in permutations[x, i]:
perms.append["".join[c]]
print[perms]
# ['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
3Marcinmarcin
Đã trả lời ngày 5 tháng 3 năm 2015 lúc 5:37Mar 5, 2015 at 5:37
9y7h0n9y7h0n9y7h0n
Marcinmarcin1 silver badge8 bronze badges
import itertools
def _itersubs[x]:
for i in range[1, len[x]+1]:
yield from itertools.permutations[x, i]
# before 3.4, replace with:
# for y in itertools.permutations[x, i]: yield y
def thefuncyouwant[x]:
return list[_itersubs[x]]
185K12 Huy hiệu vàng158 Huy hiệu bạc222 Huy hiệu đồngwant a list of
from itertools import permutations
x = 'god'
perms = []
for i in range[1, len[x]+1]:
for c in permutations[x, i]:
perms.append["".join[c]]
print[perms]
# ['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
4 items -- it will
take a lot of memory for any from itertools import permutations
x = 'god'
perms = []
for i in range[1, len[x]+1]:
for c in permutations[x, i]:
perms.append["".join[c]]
print[perms]
# ['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
5 not very short -- but, it's what you asked for, so here it is. The iterator yielding one item at a time is obviously more natural and probably preferable, but just wrapping it in a from itertools import permutations
x = 'god'
perms = []
for i in range[1, len[x]+1]:
for c in permutations[x, i]:
perms.append["".join[c]]
print[perms]
# ['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
6 call will eat up just as much memory as you crave!-]Sử dụng
from itertools import permutations
x = 'god'
perms = []
for i in range[1, len[x]+1]:
for c in permutations[x, i]:
perms.append["".join[c]]
print[perms]
# ['g', 'o', 'd', 'go', 'gd', 'og', 'od', 'dg', 'do', 'god', 'gdo', 'ogd', 'odg', 'dgo', 'dog']
0 và liệt kê toàn bộMar 5, 2015 at 5:41
from itertools import permutations
[''.join[j] for i in range[1,len[x] + 1] for j in permutations[x, i]]
Alex MartelliĐầu ra163 gold badges1203 silver badges1380 bronze badges