无法创建不重复的随机字符列表

时间:2017-06-02 14:51:07

标签: python python-3.x

嗨,我一周前开始学习python。我正在尝试创建一个字典来替换字符。例如(dictionary["a"] = "%")。

我首先从ASCII 033 to 126创建了一个包含所有字符顺序的列表。然后我尝试创建一个随机字符列表,以匹配第一个列表中的字符。但它处于无限循环中。这需要很长时间,还是我的代码?

以下是代码:

def replacement():
    s=0
    while s in range(93):
        rep.append(chr(randint(33,126)))
        if(letters[s] != rep[s]):
            k=0
            for replace in rep:
                if replace == rep[s]:
                    k+=1
            if(k<2):    
                s+=1
    print(rep)

letters = []
rep = []
i=33
while i <= 126:
    letters.append(chr(i))
    i+=1
replacement()

2 个答案:

答案 0 :(得分:3)

如果你想以随机顺序用chr(33)到chr(126)填充一个列表,一个更好的方法是使用random.shuffle()

from random import shuffle
letters = [chr(x) for x in range(33, 127)]
shuffle(letters)

这三行可以取代您在问题中发布的所有内容。正如我所理解的那样,这是一种更快,更容易理解的完成任务的方式。

答案 1 :(得分:2)

while s in range(93):没有按照您的想法行事。它检查s是否在0..92范围内并且只要该条件为真就循环;由于s永远不会从初始值0更改其值,因此这种情况永远不会变为错误。

要迭代范围0..92,您应该使用:

for s in range(93):

您的其他while循环也应该重写为:

for i in range(33,127):
    letters.append(chr(i))

甚至更好,取而代之的是列表理解:

letters = [chr(i) for i in range(33,127)]