You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中从指定列表生成无重复的随机字符串取值列表?

Python 从自定义列表生成无重复随机字符串取值方案

问题原因

你现有代码和之前的尝试出现重复值有两个核心原因:

  1. 你用random.choice()循环取值的逻辑本身没有去重机制,多次取值天然可能返回重复内容
  2. 你的原始列表column_arr本身包含大量重复元素,哪怕用random.sample(),如果不先对原列表做值去重,也只会保证取的元素索引不重复,依旧可能抽到值相同的元素

解决方案

先对原始列表做值去重,再通过random.sample()直接取指定数量的随机值,就能保证返回结果完全无重复。

保留原列表元素出现顺序的实现代码

import random 

column_arr = ['id', 'name', 'location', 'duration'
, 'id', 'name', 'quantity', 'unit'
, 'id', 'description', 'unit', 'quantity', 'unit_cost']

# 对原列表去重,保留元素首次出现的顺序(Python3.7及以上版本支持)
unique_column = list(dict.fromkeys(column_arr))
# 从去重后的列表中随机取3个不重复的值
arr = random.sample(unique_column, 3)
print(arr)

无需保留顺序的简化实现

如果不需要保留原列表的元素出现顺序,可以直接用集合去重,代码更简洁:

import random 

column_arr = ['id', 'name', 'location', 'duration'
, 'id', 'name', 'quantity', 'unit'
, 'id', 'description', 'unit', 'quantity', 'unit_cost']

unique_column = list(set(column_arr))
arr = random.sample(unique_column, 3)
print(arr)

注意事项

  • random.sample()的取样数量不能大于待取样列表的总长度,你当前场景下去重后的列表共有8个唯一元素,取3个完全符合要求
  • 不要使用循环+random.choice()的方案实现无重复取值,该逻辑本身无法避免重复,需要额外加判断去重,效率远低于上述方案

内容的提问来源于stack exchange,提问作者Jore Dawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:45:10