Python: 使用 del 或 list.remove 进行列表操作
Python: list manipulation using del or list.remove
我正在尝试编写一个函数。此函数以数字列表作为输入,找到此列表中最大的连续数字序列和 returns 仅包含原始列表的最大数字序列的列表。
示例:
In [2]: largestSeq([1,2,3,4,1,2,3])
Out[2]: [1, 2, 3, 4]
只要输入列表中有 0 个或超过 1 个元素,它就可以工作。
我在我的代码中包含了打印语句以查看错误所在。
这里是调用largestSeq([1])
和largestSeq([1,2])
的代码和结果:
代码:
def findSeq(seq): #this finds a sequence of consecutive numbers
i = 0 #in a list and returns it
if len(seq) <= 1: #it stops when the next number in the list
return seq #is smaller than the former
s =[seq[0]]
while seq[i] < seq[i+1]:
i += 1
s.append(seq[i])
if i == len(seq)-1:
break
return s
def largestSeq(seq,a=[]):
b = findSeq(seq) #find the first consecutive sequence
if len(seq) == 0:
return a
print 'Length of b is ' + str(len(b))
if len(b) > len(a): #check if found sequence is bigger than
print 'seq is now ' + str(seq)#the last found sequence
print 'b is now ' + str(b)
i = len(b)
print 'now deleting elements of seq'
for d in range (i):
seq.remove(seq[0]) #remove found sequence from the original
#del seq[0:i] #list
print 'seq is now ' + str(seq)
print 'b is now ' + str(b)
return largestSeq(seq,b) #start over
else:
del seq[0:len(b)]
return largestSeq(seq,a)
现在来电:
In [14]: largestSeq([1])
Length of b is 1
seq is now [1]
b is now [1]
now deleting elements of seq
seq is now []
b is now []
Out[14]: []
largestSeq([1,2])
Length of b is 2
seq is now [1, 2]
b is now [1, 2]
now deleting elements of seq
seq is now []
b is now [1, 2]
Out[15]: [1, 2]
请注意,在第一次调用中,b
中的元素在删除 seq
中的元素后也会被删除,尽管我没有更改它!
在与 [1,2]
的第二次通话中,b
的行为就像我想要的那样,而 seq
被删除了。
我尝试使用 list.remove
和 del
操作列表(被注释掉并产生相同的错误)。
里面发生了什么?我不明白。
我希望 b
在第一次调用中保持不变,就像在第二次调用中一样。
这是一个非常具体的问题。如果有任何建议,我将不胜感激!
在第一种情况下,您 return 在同一个列表中,您必须 return 列表的副本。
尝试:
def findSeq(seq): #this finds a sequence of consecutive numbers
i = 0 #in a list and returns it
if len(seq) <= 1: #it stops when the next number in the list
return list(seq) #is smaller than the former
s =[seq[0]]
while seq[i] < seq[i+1]:
i += 1
s.append(seq[i])
if i == len(seq)-1:
break
return s
我正在尝试编写一个函数。此函数以数字列表作为输入,找到此列表中最大的连续数字序列和 returns 仅包含原始列表的最大数字序列的列表。
示例:
In [2]: largestSeq([1,2,3,4,1,2,3])
Out[2]: [1, 2, 3, 4]
只要输入列表中有 0 个或超过 1 个元素,它就可以工作。 我在我的代码中包含了打印语句以查看错误所在。
这里是调用largestSeq([1])
和largestSeq([1,2])
的代码和结果:
代码:
def findSeq(seq): #this finds a sequence of consecutive numbers
i = 0 #in a list and returns it
if len(seq) <= 1: #it stops when the next number in the list
return seq #is smaller than the former
s =[seq[0]]
while seq[i] < seq[i+1]:
i += 1
s.append(seq[i])
if i == len(seq)-1:
break
return s
def largestSeq(seq,a=[]):
b = findSeq(seq) #find the first consecutive sequence
if len(seq) == 0:
return a
print 'Length of b is ' + str(len(b))
if len(b) > len(a): #check if found sequence is bigger than
print 'seq is now ' + str(seq)#the last found sequence
print 'b is now ' + str(b)
i = len(b)
print 'now deleting elements of seq'
for d in range (i):
seq.remove(seq[0]) #remove found sequence from the original
#del seq[0:i] #list
print 'seq is now ' + str(seq)
print 'b is now ' + str(b)
return largestSeq(seq,b) #start over
else:
del seq[0:len(b)]
return largestSeq(seq,a)
现在来电:
In [14]: largestSeq([1])
Length of b is 1
seq is now [1]
b is now [1]
now deleting elements of seq
seq is now []
b is now []
Out[14]: []
largestSeq([1,2])
Length of b is 2
seq is now [1, 2]
b is now [1, 2]
now deleting elements of seq
seq is now []
b is now [1, 2]
Out[15]: [1, 2]
请注意,在第一次调用中,b
中的元素在删除 seq
中的元素后也会被删除,尽管我没有更改它!
在与 [1,2]
的第二次通话中,b
的行为就像我想要的那样,而 seq
被删除了。
我尝试使用 list.remove
和 del
操作列表(被注释掉并产生相同的错误)。
里面发生了什么?我不明白。
我希望 b
在第一次调用中保持不变,就像在第二次调用中一样。
这是一个非常具体的问题。如果有任何建议,我将不胜感激!
在第一种情况下,您 return 在同一个列表中,您必须 return 列表的副本。
尝试:
def findSeq(seq): #this finds a sequence of consecutive numbers
i = 0 #in a list and returns it
if len(seq) <= 1: #it stops when the next number in the list
return list(seq) #is smaller than the former
s =[seq[0]]
while seq[i] < seq[i+1]:
i += 1
s.append(seq[i])
if i == len(seq)-1:
break
return s