2015-03-19 215 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 

不知道我是否理解了這個問題。