내가 아직 itertools
해결책을 사용하고 있지만 흥미로운 방법이 있습니다.
생성하는 문자열 목록은 도덕적으로 이진 트리라는 점에 유의하십시오. 문자열에서 대체 문자의 각 인스턴스에서 무시 ("왼쪽") 또는 바꾸기 ("오른쪽 오른쪽")를 원할 수 있습니다. 따라서 대체 문자열에서 이진 트리 구조를 만들 수 있습니다. 이진 트리의 잎을 걷는 것은 쉽습니다.
class ReplacementTree(object):
def __init__(self, s, src, target, prefix=""):
self.leaf = src not in s
if 1 == len(s.split(src, 1)):
self.head, self.tail = s, ""
else:
self.head, self.tail = s.split(src, 1)
self.prefix, self.src, self.target = prefix, src, target
@property
def value(self):
if self.leaf:
return self.prefix + self.head
@property
def left(self):
if self.leaf:
return None
else:
return ReplacementTree(self.tail,
self.src,
self.target,
prefix=self.prefix + self.head + self.src)
@property
def right(self):
if self.leaf:
return None
else:
return ReplacementTree(self.tail,
self.src,
self.target,
prefix=self.prefix + self.head + self.target)
def leaves(tree):
if tree.leaf:
yield tree.value
else:
for leaf in leaves(tree.left):
yield leaf
for leaf in leaves(tree.right):
yield leaf
예 : 지정된 경우
>>> x = repltree.ReplacementTree("thruput", "u", "ough")
>>> list(repltree.leaves(x))
['thruput', 'thrupought', 'throughput', 'throughpought']
는 = U 일이 무엇인지와는 UU 교체, 당신은 AuuA의 출력이 하나 또는 두 개의 AuuuA을 가지고있는 출력을 원하는가? – ideerge