Python Can';t创建不重复的随机字符列表
嗨,我一周前开始学习python。我正在尝试创建一个字典来替换字符。例如(Python Can';t创建不重复的随机字符列表,python,python-3.x,Python,Python 3.x,嗨,我一周前开始学习python。我正在尝试创建一个字典来替换字符。例如(字典[“a”]=“%”) 我首先创建了一个列表,包含从ascii033到126的所有字符顺序。然后我尝试创建一个随机字符列表,以匹配第一个列表中的字符。但这是一个无限循环。这需要很长时间还是我的代码 代码如下: def replacement(): s=0 while s in range(93): rep.append(chr(randint(33,126))) if(le
字典[“a”]=“%”
)
我首先创建了一个列表,包含从ascii033到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()
def replacement():
s=0
当s在范围(93)内时:
代表附加(chr(randint(33126)))
如果(字母)!=rep[s]):
k=0
对于在rep中替换:
如果replace==rep[s]:
k+=1
如果(k而s在范围(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)]
如果您想以随机顺序用chr(33)到chr(126)填充列表,更好的方法是使用random.shuffle()
这三行可以取代你在问题中发布的所有内容。按照我的理解,这是一种更快、更容易理解的完成任务的方式。@ChihebNexus我不认为字母=[]
forwards应该在函数内部。@Sid,您的代码将处于无限循环中,因为s
将始终在范围(93)
之间。最好使用for循环
@WillDaSilva,想法是用chr(33)
到chr(126)的所有字符填充rep
以随机顺序。Sid的算法目前有一些缺陷,但即使修复了这些缺陷,这种方法也非常缓慢。更好的方法是使用内置的random.shuffle()你想用这种方法创建一个随机列表是很酷的,但是你知道它为什么慢吗?随着rep
变得越来越长,通过rep
来检查新的字符是否已经在其中,随机生成一个不在rep
中的字符的几率越来越低andomly选择最后两个字符需要很长时间。谢谢您的回答@WillDaSilva
from random import shuffle
letters = [chr(x) for x in range(33, 127)]
shuffle(letters)