-4

我应该编写一个收缩列表的程序。例如:

[1, 3, 4, 5, 1, 8, 6,]

必须被压缩成一个看起来像这样的列表:

[1, 5, 1, 8, 6, 6]

我不知道如何做到这一点,并希望你们中的任何人都可以帮助我。

我得到了一个看起来像这样的列表 l1 = [1, 3, 9, 1, 2, 7, 8] 并且我应该将该列表压缩为一个新列表,该列表由旧列表非降序段末端组成。它应该适用于给定的任何列表。

4

1 回答 1

0

让我试着理解这个问题:

我给出了一个看起来像这样的列表 l1 = [1, 3, 9, 1, 2, 7, 8] 并且我应该通过取第一个数字然后是下一个最大的数字和之后的最小数字然后是最大的数字来收缩列表再次。这是一项学校作业,我不知道该怎么做。英语不是我的第一语言,很难解释作业:/

我认为“最大”和“最小”是指局部最大值和最小值。因此,如果和,则索引处的数字i是“最大的” 。反过来说“最小”。所以基本上你正在寻找一个函数的极值。l[i-1] < l[i]l[i] > l[i+1]N -> N

如果这是您想要的,这应该会有所帮助(考虑到起点和终点始终是极值):

#! /usr/bin/python3.2

def sign(x): return 0 if not x else x // abs(x)

def extrema (l):
    return [l[0]] + [e for i, e in enumerate(l[:-1]) if i and sign(e-l[i-1])==sign(e-l[i+1])] + [l[-1]]

l1 = [1, 3, 9, 1, 2, 7, 8]
print (extrema (l1))
于 2013-11-06T18:27:43.333 回答