python:在不使用循环的情况下在列表中查找升序/降序元素

假设我有一个列表,我需要在列表“a”中分别以递增/递减顺序找到两个列表。

a=[4,2,6,5,2,6,9,7,10,1,2,1]

输出应该是一个列表:

b=[4,6,9,10] # in an ascending order

c=[4,2,1] # in a decreasing order , c[-1] is the first '1' in list a, c[1] is the first '2' in list a.

有没有一种不使用循环的方法可以做到这一点(我已经使用循环解决了它)?由于数据集很大,使用循环会很慢。因此,如果可能的话,我正在寻找一种更快的方法。非常感谢。


天涯尽头无女友
浏览 87回答 3
3回答

幕布斯6054654

你能确定你的问题吗:你想找到最长的上升/下降子列表吗?在这种情况下,你的问题与动态规划有关,我认为你需要不止一个循环......如果您不希望您的子列表最大,也许您可以对列表 b 和 c 的长度设置限制以更快地完成。如果您的列表中有其他假设,例如,您知道它的最大值和最小值,则可以在达到最大值时停止计算(仅当您希望列表严格递减/递增时)。我希望它对你有用:)

HUWWW

您应该使用 .sort() 方法。如果未输入任何参数,则它会自动按升序对列表进行排序。对于降序,只需执行 .sort(reverse=True)。b = a.sort()#ascendingc = a.sort(reverse=True)#descending我希望这就是您要找的。

宝慕林4294392

为了明确我的问题,以下是我如何获得这两个列表:b=[];c=[];for i in range(len(a)):&nbsp; &nbsp; if i==0:&nbsp; &nbsp; &nbsp; &nbsp; b.append(a[i])&nbsp; &nbsp; elif a[i]>b[-1]:&nbsp; &nbsp; &nbsp; &nbsp; b.append(a[i])for i in range(len(a)):&nbsp; &nbsp;if i==0:&nbsp; &nbsp; &nbsp; &nbsp;c.append(a[i])&nbsp; &nbsp;elif a[i]<c[-1]:&nbsp; &nbsp; &nbsp; &nbsp;c.append(a[i])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python