2015-10-21 2 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 

Edit: Для последнего вывода, то есть 0, потому что список заканчивается, и предположим, что список выглядит только на расстоянии в привязанном к правому

+0

Я не понимаю, как вы получили этот выход. Можете ли вы подробнее рассказать подробнее? Разве вы не получили бы 5 за каждый под-список? Возможно, я не понимаю вашу проблему. – rayryeng

+1

Итак, для первого подписок в 'the_list' индекс для наименьшего элемента' 0' равен 2, а индекс для наибольшего элемента '5' равен 5. Следовательно, расстояние между двумя индексами равно' 3' – Eninfo

+0

Ah ok, поэтому вам нужны индексы. Я понял, что это сами фактические элементы. Благодарю. – 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

Смежные вопросы

 Смежные вопросы