假设我有一个列表,我需要在列表“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 的长度设置限制以更快地完成。
如果您的列表中有其他假设,例如,您知道它的最大值和最小值,则可以在达到最大值时停止计算(仅当您希望列表严格递减/递增时)。
我希望它对你有用:)
HUWWW
TA贡献1874条经验 获得超12个赞
您应该使用 .sort() 方法。如果未输入任何参数,则它会自动按升序对列表进行排序。对于降序,只需执行 .sort(reverse=True)。
b = a.sort()
#ascending
c = a.sort(reverse=True)
#descending
我希望这就是您要找的。
宝慕林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])
添加回答
举报
0/150
提交
取消