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

相关问题