2015-10-21 132 views
4

我有一個列表the_list = [[3, 2, 0, 1, 4, 5], [4, 2, 1, 3, 0, 5], [0, 1, 2, 3, 4, 5], [1, 5, 2, 4, 3, 0]]。如何找出從列表中最小元素到最大元素的距離。例如,對於第一個子列表在the_list中,最小元素0的索引是2,最大元素5的索引是5。因此,這兩個指數之間的距離是3因此我得到以下輸出:從列表中的最小元素到最大元素的距離

3 
1 
5 
0 

編輯:在過去的輸出,它是0,因爲名單到此爲止,並認爲這個列表只查找距離在綁定到正確的

+0

我不明白你是如何得到這個輸出的。你能再詳細一點嗎?你不是每個子列表只能得到5個嗎?我可能不瞭解你的問題陳述。 – rayryeng

+1

因此,對於'the_list'中的第一個子列表,最小元素'0'的索引是2,最大元素'5'的索引是5.因此,兩個索引之間的距離是'3' – Eninfo

+0

啊好吧,所以你想要的指數。我明白這是實際的元素本身。謝謝。 – rayryeng

回答

1

試試這個:

lst = [[3, 2, 0, 1, 4, 5], [4, 2, 1, 3, 0, 5], [0, 1, 2, 3, 4, 5], [1, 5, 2, 4, 3, 0]] 
[max(s.index(max(s)) - s.index(min(s)), 0) for s in lst] 
=> [3, 1, 5, 0] 
+0

感謝您的幫助!對於第四個子列表,最小的元素是在子列表的末尾,因爲列表在這裏結束,距離將是0.我只需要一個距離綁定到右邊 – Eninfo

+0

@Eninfo我不明白你的邏輯,在問題你說,它是最大值和最小值的_indexes_之間的距離,如果其中一個元素在最後,它有什麼關係? –

1
>>>list(map(lambda x: x.index(max(x)) - x.index(min(x)) if x.index(max(x)) - x.index(min(x)) > 0 else 0 ,l)) 
[3, 1, 5, 0] 
0

我不知道蟒蛇非常多,但算法可能是類似這樣的(在僞代碼):

Foreach list in the_list do begin 
    Min:=maxint; 
    MinPos:=0; 
    Max:=0; 
    MaxPos:=0; 
    For I := 0 to list.length do begin 
     If list[i] > Max then begin 
      Max := list[i]; 
      MaxPos := i; 
     End; 
     If list[i] < Min then begin 
      Min := list[i]; 
      MinPos := i; 
     End; 
    End; 
    If MinPos < MaxPos then 
     Write MaxPos - MinPos; 
    Elsewhere 
     Write 0; 
End; 

(對不起,我寫這篇文章在移動,我無法正確地格式化的文本)。

+1

不用擔心,我已經爲您修正了縮進,只需在版主變得可見之前即可批准。 – plamut

+0

謝謝!我必須學習如何從移動設備發佈和格式化。 – Luis

相關問題