2024-05-16 19:26:14 发布
网友
我有一个包含固定字符的字符串。我可以用另一个字符或字符串替换它来生成字符串的排列吗?? 我有这样的东西:
designatedstring="u" replacerstring="ough" s="thruput"
我想要这样的输出:
有办法吗?在
根据您在问题中给出的输入,将生成所需的列表:
s="thruput" designatedstring="u" replacerstring="ough" l = [] for i in range(len(s)): if s[i] == designatedstring: l += [s[:i] + replacerstring + s[i + 1:]] l += [s.replace(designatedstring, replacerstring)]
更多itertools糖:
itertools
>>> parts = s.split(designatedstring) >>> num = len(parts) - 1 >>> replacements = itertools.product([designatedstring, replacerstring], repeat=num) >>> replacements = list(replacements) >>> replacements.remove((designatedstring,) * num) >>> for r in replacements: ... print ''.join(itertools.chain(*zip(parts, r + ('',)))) ... thrupought throughput throughpought
如果你能忍受结果中的原始字符串,你可以省略4行和5行的难看的转换。在
这里有一个有趣的方法,尽管我还是会使用itertools解决方案。在
请注意,您生成的字符串列表在道义上是一个二叉树:在字符串中替换字符的每个实例中,您要么忽略它(“goleft”)要么替换它(“goright”)。因此,您可以用替换字符串生成一个二叉树结构。在二叉树的叶子上行走很容易。在
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
示例:
根据您在问题中给出的输入,将生成所需的列表:
更多
itertools
糖:如果你能忍受结果中的原始字符串,你可以省略4行和5行的难看的转换。在
这里有一个有趣的方法,尽管我还是会使用
itertools
解决方案。在请注意,您生成的字符串列表在道义上是一个二叉树:在字符串中替换字符的每个实例中,您要么忽略它(“goleft”)要么替换它(“goright”)。因此,您可以用替换字符串生成一个二叉树结构。在二叉树的叶子上行走很容易。在
示例:
^{pr2}$相关问题 更多 >
编程相关推荐