-2

受到建议Recursive implementation of permutations in Python to use a set to avoid duplicated for permutations in Python的启发,我正在考虑使用集合作为从字符串中删除重复项的通用方法(显然不会保留顺序)。

所以如果我有

str1 = 'Thiss'
set_str1 = set(str1)
print set_str1

输出集(['T','h', 'i', 's'])

问题是如何从这个集合中取回字符串。我在想我可以只使用 set 然后将其转换回字符串,然后找到修改后的字符串的排列。这是一种有效的方法吗?我也不想使用 itertools,因为我只是在准备一些面试。

4

2 回答 2

3

由于集合不保留顺序,您可能/可能不会取回原始字符串,但您可以使用join(). 如下——

>>> "".join(set(['T','h', 'i', 's']))
'ihsT'

然后,您可以使用itertools.permutations查找排列。

>>> list(permutations("".join(set("Thisss"))))
[('i', 'h', 's', 'T'), ('i', 'h', 'T', 's'), ('i', 's', 'h', 'T'), ('i', 's', 'T', 'h'),
  ... ]

然后,同样适用join于从排列列表中获取字符串格式的元素。

不过,您无需加入集合即可获得排列。

只是在做

>>> list(permutations(set("Thisss")))

给出类似的答案,然后你可以加入元素。

于 2013-07-18T18:17:19.967 回答
1

您不需要重新创建字符串;无论如何,集合没有集合排序,并且集合足以创建排列:

>>> for p in permutations(set('Thiss')):
...     print(''.join(p))
... 
Tsih
Tshi
Tish
Tihs
Thsi
This
sTih
sThi
siTh
sihT
shTi
shiT
iTsh
iThs
isTh
ishT
ihTs
ihsT
hTsi
hTis
hsTi
hsiT
hiTs
hisT
于 2013-07-18T18:21:35.003 回答