Python实现:生成指定长度且指定子串无重复的随机图像列表
解决指定子串唯一的随机采样问题
实现思路
不用一次性采样20个再去重替换,而是逐个采样并校验:维护一个记录已出现子串的集合,每次随机选一个元素,检查其指定范围的子串是否已存在,不存在就保留,存在则重新采样,直到列表长度达到20。
完整代码
import random # 读取主图像列表 with open('Faces/negFaces.txt') as f: negFaces = f.read().splitlines() target_count = 20 image_list1 = [] seen_substrings = set() # 存储已出现的目标子串 while len(image_list1) < target_count: # 随机选取一个候选图像 candidate = random.choice(negFaces) # 提取指定范围的子串(示例为前5个字符[0:5]) substring = candidate[0:5] # 子串未重复则加入结果列表 if substring not in seen_substrings: image_list1.append(candidate) seen_substrings.add(substring)
关键说明
- 使用集合
seen_substrings来记录已出现的子串,集合的查询效率远高于列表,能避免重复检查的性能问题 - 循环逻辑确保最终列表里的每个元素,其指定子串都是唯一的,完全符合需求
- 如果需要调整子串的范围,只需要修改
candidate[0:5]的切片参数即可
内容的提问来源于stack exchange,提问作者cjb10
相关产品推荐
相关产品推荐

