2015-03-19 23 views
1

我有一个包含许多列表的文件。我想访问从每个列表中检索到的值的索引。我使用随机函数,如下所示。它很好地检索值,但我需要获得所获取值的索引。获取从random.sample(list,2)中检索到的值的索引?

for i in range(M): 
      print(krr[i]) 
      print(krr[i].index(random.sample(krr[i],2))) 
      nrr[i]=random.sample(krr[i],2) 

      outf13.write(str(nrr[i])) 
      outf13.write("\n") 

ValueError说检索两个值都没有在,即使他们存在列表...

+0

你能发布'IndexError'的完整堆栈跟踪给予更多细节 – bvidal 2015-03-19 10:28:23

回答

1

要检索您的列表中随机选择值的索引,你可以使用enumerate将返回索引和迭代的一个元组值:

import random 
l = range(10) # example list 
random.shuffle(l) # we shuffle the list 
print(l) # outputs [4, 1, 5, 0, 6, 7, 9, 2, 8, 3] 
index_value = random.sample(list(enumerate(l)), 2) 
print(index_value) # outputs [(4, 6), (6, 9)] 

这里的第4个值6和第六值9被选中 - 当然每次运行都会返回不同的东西。

同样在您的代码中,您正在打印krr[i]的第一个样本,然后在下一行再次对其进行采样,并将其指定给nrr[i]。这两个电话将导致不同的样本,并可能导致您的IndexError。 OP的评论

最明确的方式到当时的值从索引中分离后

编辑是:

indexes = [] 
values = [] 
for idx, val in index_value: 
    indexes.append(idx) 
    values.append(val) 
print indexes # [4, 6] 
print values # [6, 9] 

注意indexesvalues都以相同的顺序为index_value

+0

thnk uu ....它的工作!...但由于我必须写的值一个没有索引的文件,我不得不进一步使用...你能告诉我如何提取索引值... – Devi 2015-03-21 07:11:05

+0

@ bvidal thnx再次...它的工作! :) – Devi 2015-03-24 08:46:02

0

你所得到的随机样本的两倍,这会导致两种不同的随机样本英寸

+0

..真的..thnks的建议 – Devi 2015-03-21 07:05:34

1

您可以尝试在list对象上使用enumerate()

根据Python的官方文档

枚举():返回一个枚举对象。序列必须是序列,迭代器,支持迭代的某个其他对象。的 由枚举返回的迭代器()的下一个()方法返回包含(从开始缺省值为0)一个 计数的元组,并从 获得的值迭代序列

一个简单的例子是这样的:

my_list=['a','b','c'] 

for index, element in enumerate(my_list): 
    print(index, element) 

# 0 a 
# 1 b 
# 2 c 

不知道我是否理解了这个问题。