使用Pyhton进行循环,如何每次都从字符串中取出一个字母而无任何重复

问题描述 投票:0回答:4

'''创建一个字符串的随机七巧板。使用choice方法创建一个字符串的5个随机字谜。

预期结果:由'CREATE'的每个字符组成的字母组合。

Output : 
Anagram# 1: taeecr 
Anagram# 2: aaaete 
Anagram# 3: acteet 
Anagram# 4: rcrcee
Anagram# 5: aeerca

'''

from random import choice
Orig = 'create'
OrigL = list(Orig)
AnagL = []
for a in range(5):
    AnagL = []
    for i in range(len(Orig)):

        p = choice(OrigL)
        AnagL.append(p)
    Anag = ''.join(AnagL)
    print('Orig#',a+1,Orig)
    print('Anag#',a+1,Anag,'\n')
python anagram
4个回答
0
投票

尝试以下类似操作,但不使用random.choice

  1. 将字符串转换为list
  2. 随机播放列表
  3. 重新加入列表

因此:

from random import shuffle
word = list('create')

for i in range(5):
    shuffle(word)
    print("Anagram #{}: {}".format(i+1, "".join(word)))

Anagram #1: aeetrc
Anagram #2: rcteea
Anagram #3: eertca
Anagram #4: tceear
Anagram #5: erecat

使用random.choice

  1. 将原始字符串转换为list
  2. 使用random.choice从列表中获得随机的索引
  3. 弹出该索引并保存字符
  4. 重复步骤2-3,直到列表为空
  5. 重复步骤1-4,直到获得5字谜

0
投票
from random import choice



Orig = 'create'
OrigL = list(Orig)
AnagL = []

for a in range(5):
    AnagL = []
    notAnal=Orig
    for i in range(len(notAnal)):
        p = choice(notAnal)
        notAnal=notAnal.replace(p,'',1)
        AnagL.append(p)
    Anag = ''.join(AnagL)
    print('Orig#',a+1,Orig)
    print('Anag#',a+1,Anag,'\n')

0
投票

如果字符串不大,则可以使用itertools进行操作:

import itertools
import random

WORD = "CREATE"
COMBS = list(itertools.permutations(WORD)) 

for idx in range(5):
    print(f'Anagram #{idx}: {"".join(random.choice(COMBS))}')

样本输出:

Anagram #0: EETCAR
Anagram #1: ECTREA
Anagram #2: AEECRT
Anagram #3: ERTCEA
Anagram #4: AEECTR

0
投票
from numpy.random import choice
s = "CREATE"
anagram_array = choice(list(s), size=len(s), replace=False)
anagram = "".join(list(anagram_array))

[注意,您可以用任何其他表达式替换size=len(s),以获得从原始字符串生成的其他类型的字符串。我还建议代码清晰,如果您必须使用choice,请使用shuffle。

如果您的numpy版本已更新,请不要使用choice,而是通过创建RNG对象并使用其选择功能来使用新的API:

from numpy.random import default_rng
rng = default_rng()
anagram = rng.choice(...)
© www.soinside.com 2019 - 2024. All rights reserved.