Python中list.index方法碰撞时如何实现等概率返回索引?
问题
假设列表a = [1,1],调用a.index(1)时总是返回0。有没有Pythonic的方法让它以相等概率返回0或1?
解法
可以结合random模块的choice方法,先筛选出所有匹配目标值的索引,再随机选取一个:
import random a = [1, 1] target = 1 # 生成所有匹配值的索引列表,再随机选一个 random_idx = random.choice([i for i, val in enumerate(a) if val == target])
如果需要复用这个逻辑,可以封装成一个类似原生index的函数,同时处理目标值不存在的情况:
import random def random_index(lst, target): matching_indices = [i for i, val in enumerate(lst) if val == target] if not matching_indices: raise ValueError(f"{target} is not in list") return random.choice(matching_indices) # 调用示例 a = [1, 1] print(random_index(a, 1)) # 等概率输出0或1
这种实现完全遵循Python的简洁风格,用列表推导式快速筛选索引,搭配标准库的random.choice完成随机选择,是很地道的Pythonic写法。
内容的提问来源于stack exchange,提问作者Enzo Dtz
相关产品推荐
相关产品推荐

