为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

天涯尽头无女友 2022-12-20 14:31:49
假设我有一个列表,我需要在列表“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.有没有一种不使用循环的方法可以做到这一点(我已经使用循环解决了它)?由于数据集很大,使用循环会很慢。因此,如果可能的话,我正在寻找一种更快的方法。非常感谢。
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

你能确定你的问题吗:

  • 你想找到最长的上升/下降子列表吗?在这种情况下,你的问题与动态规划有关,我认为你需要不止一个循环......

  • 如果您不希望您的子列表最大,也许您可以对列表 b 和 c 的长度设置限制以更快地完成。

    • 如果您的列表中有其他假设,例如,您知道它的最大值和最小值,则可以在达到最大值时停止计算(仅当您希望列表严格递减/递增时)。

我希望它对你有用:)


查看完整回答
反对 回复 2022-12-20
?
HUWWW

TA贡献1874条经验 获得超12个赞

您应该使用 .sort() 方法。如果未输入任何参数,则它会自动按升序对列表进行排序。对于降序,只需执行 .sort(reverse=True)。


b = a.sort()

#ascending


c = a.sort(reverse=True)

#descending

我希望这就是您要找的。


查看完整回答
反对 回复 2022-12-20
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

为了明确我的问题,以下是我如何获得这两个列表:


b=[];c=[];

for i in range(len(a)):

    if i==0:

        b.append(a[i])

    elif a[i]>b[-1]:

        b.append(a[i])

for i in range(len(a)):

   if i==0:

       c.append(a[i])

   elif a[i]<c[-1]:

       c.append(a[i])


查看完整回答
反对 回复 2022-12-20
  • 3 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信