如何在Python3中将两个字符串改组为一组字符串

时间:2019-03-20 01:20:19

标签: python-3.x

如何给两个字符串s || t(shuffle(s,t))随机排序,即无论我们如何随机排序,第一个字符都始终位于s和t中的第二个字符之前。结果以一组没有重复的字符串返回。

我进行了以下测试:

print(shuffle('ab', 'cd'))

结果:

['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab']

非常感谢。

3 个答案:

答案 0 :(得分:0)

此方法将对两个字符串进行混洗,并在它们之间返回一个混洗列表,其中字符的顺序与原始字符串中的顺序相同。如果字符重复,结果也会重复。

def shuffle(s1, s2):
    if len(s1) == 1:
        return [s2[:i] + s1 + s2[i:] for i in range(len(s2) + 1)]
    if len(s2) == 1:
        return [s1[:i] + s2 + s1[i:] for i in range(len(s1) + 1)]
    return [s1[0]+ s for s in shuffle(s1[1:], s2)] + [s2[0] + s for s in shuffle(s1, s2[1:])]

print shuffle("ab", "cd")

它的工作原理是获取每个字符串的第一个字符,然后递归改组其余字符,并将此字符添加到列表中的每个元素。当每个字符串上剩余一个字符时,它将返回一个列表,其中该字符将添加到另一个字符串的每个位置。希望对您有所帮助。

答案 1 :(得分:0)

因此,您可以对最终的混洗列表应用条件,以从混洗的列表中生成新列表:

S=shuffle('ab','cd')
nl=[]
for w in S:
    if(w.index('a')<w.index('b') and  w.index('c')<w.index('d')):
    nl.append(w)

因此,nl是根据您的要求列出的新列表:)

答案 2 :(得分:0)

如果我正确理解了这个问题,这应该可以工作。注意,当您向其添加字母时,它将成为一个长期存在的问题。列表中的每个条目4个字母有6种可能的组合。列表中的每个条目8个字母都有5,040种可能的组合。

192.168.1.10    example.com