我想用Python编写一个脚本,并且手上有一个关于ABDEB的词。我想将这个单词排列成一个数组,然后将单词中的字母随机排列,并得到不同组合的单词。此外,这些组合可能包含重复的字母,并在列中添加类似的内容;
BBBED, EEEEA, ADDEA,
等
毕竟,我想将这些单词放入文本文件中。
我该怎么做?
如果您能提供帮助,我将不胜感激。
答案 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)时间内运行