2017-03-27 43 views
-1

考慮一個列表,列表中的這樣的一個子集:如何通過引用列表中每個子集的元素的索引來對列表的子集進行排序?

v = [1,2,4,5,2,8,1] (index = 0,1,2,3,4,5,6,7) 
v_sub = [1,2,8,4,1] (corresponding index in v = 0,1,6,2,7) 

我的編碼是這樣的:

v_sub.sort(key=v.index) #Or v_sub.sort(key=lambda x: v.index(x)) 
print(v_sub)    #[1, 1, 2, 4, 8] 

我想通過在越來越方式以V與其對應的索引排序v_sub。這意味着[0,1,2,6,7]。所以我認爲它會給我[1,2,4,8,1],但它沒有。我怎樣才能以簡潔的方式糾正我的代碼?

+1

*我認爲這會給我[1,2,4,1 ] *。那麼它已經如此。另外,請您詳細說明您的預期產出及其背後的邏輯嗎? – Kasramvd

+0

@Kasramvd是對的。列表元素的索引是在元素插入列表中時創建的。所以,一個列表已經被索引排序了。 –

+4

因爲'index'給出*第一個索引*。 –

回答

2

您有重複的值v,所以你需要他們每個人,只要你用他們標誌:

v = [1,2,4,5,2,8,1] 
v_sub = [1,2,8,4,1] 

def indexAndClear(v, x): 
    i = v.index(x) 
    v[i] = None # This index should not be returned a second time 
    return i 

vCopy = v[:] # to make sure we do not mutate v in the process 
v_sub.sort(key=lambda x: indexAndClear(vCopy, x)) 
print(v_sub) 
+0

是的,標記是否在v_sub中處理它是關鍵。 –

相關問題