假設我有一個列表,我需要在列表“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
提交
取消