如何从含100个乱序1-20值的一维数组中抽取两个值及其索引?
解决方法:随机获取数组元素的索引与对应值
嘿,我来帮你搞定这个问题!你之前的思路是直接从Values里抽取值,但因为你的数组是用1-20重复凑出来的100个元素,就算拿到值也没法精准对应到原数组的具体索引——毕竟同一个值可能在多个位置出现。
最直接的解法是先随机抽取索引,再通过索引获取对应的值,这样就能同时拿到你需要的索引和元素了,具体代码如下:
情况1:选取两个不重复的索引
如果你不想重复选中同一个位置,用random.sample来抽索引(它默认会返回不重复的元素):
import random # 先模拟你的Values数组(1-20乱序共100个元素) Values = [random.randint(1, 20) for _ in range(100)] # 随机选2个不重复的索引 selected_indices = random.sample(range(len(Values)), 2) # 把索引和对应的值配对存起来 list1 = [(idx, Values[idx]) for idx in selected_indices] # 输出示例:比如 [(23, 12), (56, 7)],第一个是索引,第二个是Values里对应的值 print(list1)
之后你要访问第二个列表的话,直接用拿到的索引就行,比如second_list[list1[0][0]]就能获取第二个列表对应第一个选中索引的值。
情况2:允许选取重复的索引
如果你的场景允许同一个位置被选中多次,把random.sample换成random.choices就行(指定k=2表示选2个):
selected_indices = random.choices(range(len(Values)), k=2)
为什么你的原代码不行?
你之前写的random.sample(Values)是从Values里抽取元素,但因为数组里有大量重复值,就算拿到[2,5],你也没法确定这两个值在Values里的具体位置——毕竟2可能在第10位也可能在第30位。直接操作索引就能完美避开这个问题啦!
内容的提问来源于stack exchange,提问作者Will.S89
相关产品推荐
相关产品推荐

