random.choice 始终打印相同的结果

random.choice prints always the same result

我是 python 的新手,但我知道如何使用其中的大部分内容,包括 random.choice。我想从 2 个文件 list.

中随机选择一个文件名

为此,我使用了这行代码:

minio = Minio('myip',
                access_key='mykey',
                secret_key='mykey',
              )

images = minio.list_objects('mybucket', recursive=True)

for img2 in images:
    names = img2.object_name

print(random.choice([names]))

每次我尝试 运行 它时,它总是打印相同的文件名 (c81d9307-7666-447d-bcfb-2c13a40de5ca.png)

我试图将“打印”函数放在“for”块中,但它打印出了两个文件的名称

您正在将变量 names 设置为一个特定的图像实例。这意味着它只是一个单一的价值。尝试将它们添加到数组或类似数组中。

例如:

names = [img2.object_name for img2 in images]

print(random.choice(names))
minio = Minio('myip',
                access_key='mykey',
                secret_key='mykey',
              )

images = minio.list_objects('mybucket', recursive=True)
names = []

for img2 in images:
    names.append(img2.object_name)

print(random.choice([names]))

试试这个,问题可能是你的名字不是列表变量

如果您想选择其中一个文件名,试试这个:

minio = Minio('myip',
                access_key='mykey',
                secret_key='mykey',
              )

images = minio.list_objects('mybucket', recursive=True)

names = []
for img2 in images:
    names.append(img2.object_name)

print(random.choice(names))

第一个代码尝试从数组 [names] 中随机 select 一个值,但这只包含一个值,即最后一次迭代后 names 变量的值的for循环。与其这样做,不如创建一个数组 names 并将 for 循环的每次迭代中的 img2.object_name 的值附加到该数组。并使用此数组获取随机名称。

您的 names 只是一个包含最近看到的图像名称的简单变量,而不是一个包含所有图像名称的列表。

脚本的最后一行如下所示:

value = 2
print(random.choice([value]))

它总是打印 2。要得到你想要的,你需要一个包含所有图像的列表。这是您的代码,经过简单修复:

names = []
for img2 in images:
    names.append(img2.object_name)

print(random.choice(names))

这些代码可以通过 list comprehension:

大大缩短
names = [img2.object_name for img2 in images]
print(random.choice([names]))