如何在Python中进行随机混排?

时间:2019-05-02 12:44:35

标签: python python-3.x random shuffle

我想用Python编写一个脚本,并且手上有一个关于ABDEB的词。我想将这个单词排列成一个数组,然后将单词中的字母随机排列,并得到不同组合的单词。此外,这些组合可能包含重复的字母,并在列中添加类似的内容;

BBBED, EEEEA, ADDEA,

毕竟,我想将这些单词放入文本文件中。

我该怎么做?

如果您能提供帮助,我将不胜感激。

4 个答案:

答案 0 :(得分:1)

根据文档,

random.shuffle是您的朋友

  

random.shuffle(x [,random])。
  将序列x随机播放。

import random

#Convert string to list of chars
li = list('ABDEB')

for i in range(5):
    #Shuffle the list, the last shuffled list is shuffled every time
    random.shuffle(li)
    #Convert list to string again and print
    print(''.join(li))

输出看起来像

DBEBA
ABEBD
BABDE
BADEB
BDAEB

或者您可以每次都以相同的基本字符串开头

import random

for i in range(5):
    li = list('ABDEB')
    random.shuffle(li)
    print(''.join(li))

要进行随机替换,您实际上可以使用itertools.combibations_with_replacement,它会一次性给您all可能的组合,然后使用random.choce从那里选择一个元素

从文档中

  

itertools.combinations_with_replacement(iterable,r)
  从输入迭代返回元素的r长度子序列,允许单个元素重复多次。

     

random.choice(seq)
  从非空序列seq返回一个随机元素。

from itertools import combinations_with_replacement
import random

li = list('ABDEB')

#Get all possible combinations with repetitions
res = [''.join(item) for item in combinations_with_replacement(li,len(li))]

#Use random.choice to pick a element from res
for i in range(5):
    print(random.choice(res))

输出看起来像

DDEEE
ABBBE
ADDDD
BBDDB
AADDB

答案 1 :(得分:1)

尝试一下。

import itertools
x = list('ABDEB')
a=[''.join(p) for p in itertools.product(x, repeat=len(x))]
print(a)

输出:

['AAAAA', 'AAAAB', 'AAAAD', 'AAAAE', 'AAAAB', 'AAABA',...]

要保存到文件,请使用以下命令。

import numpy as np
np.savetxt('test.txt', a, delimiter=" ", fmt="%s")

答案 2 :(得分:0)

最简单的方法之一是使用random.shuffle函数: https://docs.python.org/3/library/random.html#random.shuffle

对于将单词写到文件中,这是一个相当琐碎的练习,所以我建议您搜索一下该答案,因为这样做的方法很多,您的说明还不清楚。

答案 3 :(得分:0)

使用random.shuffle。它比使用朴素算法更快,因为它使用了Fisher-Yates随机播放。它运行时间为O(n),是一次完美的洗牌。

您自己的实现可能会在O(n ^ 2)时间内运行