【问题标题】:Distance from smallest to the largest element in lists (inside a list)列表中最小元素到最大元素的距离(在列表中)
【发布时间】:2015-10-21 00:09:25
【问题描述】:

我有一个列表,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中的第一个子列表@最小元素的索引@987654323 @ 是 2,最大元素 5 的索引是 5。因此,两个索引之间的距离为3 因此我得到以下输出:

3
1
5
0

编辑:对于最后一个输出,它是 0,因为列表在那里结束,并假设列表只查找右侧绑定的距离

【问题讨论】:

  • 我不明白你是怎么得到那个输出的。你能详细说明一下吗?您不会为每个子列表获得 5 个吗?我可能不理解您的问题陈述。
  • 所以对于the_list中的第一个子列表,最小元素0的索引为2,最大元素5的索引为5。因此,两个索引之间的距离为3
  • 啊,好吧,所以你想要索引。我理解那是实际的元素本身。谢谢。
  • @Eninfo 在您的示例中,最后一个子列表的距离将是 4,而不是 0

标签: python python-3.x


【解决方案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。我只需要向右绑定的距离
  • @Eninfo 我不明白你的逻辑,在你说的是最大值和最小值的索引之间的距离,如果一个有什么关系的元素在末尾?
【解决方案2】:
>>>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]

【讨论】:

    【解决方案3】:

    我不是很了解python,但是算法可能类似于这个(伪代码):

    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;
    

    (对不起,我在手机上写了这篇文章,无法正确格式化文本)。

    【讨论】:

    • 别担心,我已经为你修复了缩进,它只需要版主批准才能显示。
    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2023-04-11
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多