如何给两个字符串s || t(shuffle(s,t))随机排序,即无论我们如何随机排序,第一个字符都始终位于s和t中的第二个字符之前。结果以一组没有重复的字符串返回。
我进行了以下测试:
print(shuffle('ab', 'cd'))
结果:
['abcd', 'acbd', 'acdb', 'cabd', 'cadb', 'cdab']
非常感谢。
答案 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