gpt4 book ai didi

python - 连续递增子序列

转载 作者:行者123 更新时间:2023-11-28 22:32:56 25 4
gpt4 key购买 nike

我正在尝试寻找列表中最长的递增连续子序列。

示例:如果我有一个列表:[1,2,3,0,2,3,5,6,7,1,4,5,6,9] 输出应该是 [0,2,3,5,6,7] 因为它比 [1,2,3][1,4,5, 6,9]

我已经编写了我的代码,我可以将我的列表分成更小的列表(如上所示),但只计算每个更小序列的长度。但是我需要做的是输出最长的子序列而不是它的长度,出于某种奇怪的原因我似乎无法做到这一点(我不断收到逻辑错误)。

这是我的代码,这是我尝试实现它的一种方式,我面临的问题是将 temp 附加到 arr2 时。请帮我解决这个问题,并建议我可以使用一种更有效的替代算法?

arr = [1,2,3,0,2,3,5,6,7,1,4,5,6,9] #original list 
arr2 = [] #empty list (2 dimension)
counter = 1

temp = [] #temporary list
for x,y in enumerate(arr):

if(x == 0):
temp.append(y) #append first value to temp
else:

if(arr[x] > arr[x-1]): #if value of x is greater than previous one:

counter += 1 #increase counter if condition met
temp.append(y) #append list value to temp

else: #if value of x is not greater than previous one:

print(temp)
arr2.append(temp) #append entire temp list to arr2
temp[:] = [] #clear the temp list
temp.append(y) #append the new lowest value to temp
counter = 1 #reset counter

print(arr2)

最佳答案

首先,您在编写时复制了对列表的引用:
arr2.append(temp)
然后您更新列表 temp,因此您最终会在 arr2 中得到对同一个列表的多个引用。您应该制作一份列表的副本:
arr2.append(temp[:])

此外,您永远不会复制找到的最后一个子序列,因此您在 arr2 中遗漏了一个子序列。您可以在 for 循环之外执行此操作,例如:

        else: #if value of x is not greater than previous one:

print(temp)
arr2.append(temp) #append entire temp list to arr2
temp[:] = [] #clear the temp list
temp.append(y) #append the new lowest value to temp
counter = 1 #reset counter

arr2.append(temp[:])
print(arr2)

通过上面的代码,你会得到[[1, 2, 3], [0, 2, 3, 5, 6, 7], [1, 4, 5, 6, 9]] 当你打印 arr2 时。然后,只需要选择里面最长的列表即可。

关于python - 连续递增子序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40479214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com