如何将变量分配给列表中的元素字符串而不是分别分配给那些元素?

How to assign variable to string of elements in a list rather than those elements separately?

我在将变量分配给特定的元素字符串时遇到了一些麻烦。这是我的代码的简化版本:

import random
import string

def printsl(string):
    import sys
    sys.stdout.write(string)
    sys.stdout.flush()



l = random.sample(string.ascii_lowercase, 26)
w = random.sample(l, random.randint(4, 10))

for elem in w:
    x = elem     #<------- 
    printsl(x)

print('')
printsl(x)

当我 运行 这段代码时,输​​出类似于

npabjcevz
z

znoyhe
e

等等

输出的第一行是我想要的,但是由于某种原因,第二行只打印了字符串的最后一个字母。如果我错了请纠正我,但我猜这是因为 elem 不是等于随机元素的整个字符串,而是被重新分配给 4-10 个不同的元素,并在 printsl(x) 下打印所有这些元素=15=] 但第二次它只使用最近的字母。

如何让它打印两次完整的字符串?或者更具体地说,如何让 x 等于整个输出字符串?

我唯一能想到的尝试就是将 x = elem 更改为 x = str(elem),但结果相同。

是的,您在这里生成了一个单独的字符列表,因为 random.sample() always returns 一个列表:

l = random.sample(string.ascii_lowercase, 26)
w = random.sample(l, random.randint(4, 10))

第一行从序列 string.ascii_lowercase 中选取了一个 列表 ,其中包含 26 个唯一且随机的字符。输入也是 26 个字符长,这意味着您基本上已经生成了一个由 26 个字母组成的随机打乱的列表。然后第二行从打乱后的列表中选择 4 到 10 个字符,再次打乱这些字符。

您使用的自定义 printls 函数让您自己有些困惑,该函数不在其打印的所有内容后添加换行符,因此 for elem in w: 循环打印的每个字符都出现在前一个字符之后。当循环完成时,for 循环变量 elem 最终绑定到 w 列表中的最后一个字符。

您可以直接在 string.ascii_lowercase

上使用 random.sample() 一次 得到相同的结果
w = random.sample(string.ascii_lowercase, random.randint(4, 10))

这仍然是一个列表,但您可以使用 str.join():

将结果连接回单个字符串
result = ''.join(w)

现在,通常 当人们从 string.ascii_lowercase 中随机选择字符时,他们不介意字符是否重复。例如,如果这样做,您将获得更好的密码。使用random.choice() function to pick one random character at a time, and repeat this process in a loop to pick your desired number of letters. A list comprehension可以使这更容易,将所有结果放入一个列表中,你将不得不再次加入结果:

result = ''.join([random.choice(string.ascii_lowercase)
                  for _ in range(random.randint(4, 10))])