嘿,我想从列表中删除一个项目(不使用EDOCX1[0]):
list1 = []
for i in range(2,101):
for j in range(2,101):
list1.append(i ** j)
list1.sort()
for k in range(1,len(list1) - 1):
if (list1[k] == list1[k - 1]):
list1.remove(list1[k])
print"length =" + str(len(list1))
set函数工作正常,但我想应用这个方法。除非我得到:
IndexError: list index out of range
在声明中:
if (list1[k] == list1[k - 1]):
编辑添加(感谢内德·巴切尔德)工作代码是:
list1 = []
for i in range(2,101):
for j in range(2,101):
list1.append(i ** j)
list1.sort()
k = 0
while k < len(list1) - 1: # while loop instead of for loop because"The range function is evaluated once before the loop is entered"
k += 1
if (list1[k] == list1[k - 1]):
list1.remove(list1[k])
list1.sort()
k -= 1 #"If you find a duplicate, you don't want to move onto the next iteration, since you'll miss potential runs of more than two duplicates"
print"length =" + str(len(list1))
我不知道你在问什么-什么集合函数?你什么意思,"应用这个方法?"
我想他不想在他的名单上有副本。
set的对象,就像在s = set( [ 2, 2, 3, 4 ] )中一样,我猜:)是作业吗?
为什么不使用set?
我想(希望)你这样做只是为了教育?
@肯尼姆:因为我想知道我的方法为什么不起作用。
@韦恩沃纳:是的,这是一个项目欧拉问题,我设法用(set)来解决它,现在我想用我的方法来解决它。
你没说什么不管用。
也许你当时应该这么说,而不是让人们猜测。(你也应该试着接受其他问题的答案,并对问题进行阅读和投票)
@nick presta:if(list1[k]==list1[k-1]):indexerror:列表索引超出范围
您的代码不起作用,因为在您的循环中,您正在迭代原始列表中的所有索引,但在执行过程中会缩短列表。在迭代结束时,您将访问不再存在的索引:
for k in range(1,len(list1) - 1):
if (list1[k] == list1[k - 1]):
list1.remove(list1[k])
在进入循环之前,对range函数进行一次评估,创建列表中所有索引的列表。每次调用remove都会将列表缩短一倍,因此如果删除任何元素,就保证在列表末尾出现错误。
如果要使用这样的循环,请尝试:
k = 1
while k < len(list1):
if list1[k] == list1[k-1]:
del list1[k]
else:
k += 1
我还修了其他一些东西:
在python if语句中,不需要在条件周围加括号。
如果你发现了一个重复,你就不想进入下一个迭代,因为你会错过超过两个重复的潜在运行。
您希望从索引1开始,而不是从零开始,因为k=0将访问列表1[-1]。
-"在输入循环之前对range函数进行一次评估"和"如果发现重复项,则不希望进入下一个迭代,因为您将错过两个以上重复项的潜在运行。"我正在寻找的答案,谢谢!
看起来你好像在试图统一一个列表(说明会很棒),请看下面的内容:http://www.peterbe.com/plog/uniqifiers-benchmark
这里还有一个关于so的问题:在python中,从列表中删除重复项的最快算法是什么,以便所有元素都是唯一的*同时保持顺序*?
很高兴把它们放在一个地方,加上书签。
独特和设置良好,我的问题是:我的代码有什么问题?
不要删除项目,而是编写一个列表,了解新列表中需要的内容:
list1[:] = [list1[k] for k in range(1,len(list1) - 1)
if not list1[k] == list1[k - 1] ]
方法会中断,因为您从列表中删除了项。当您这样做时,列表变短,下一个循环迭代跳过了一个项目。假设你看k=0,l=[1,2,3]。删除第一项,所以l=[2,3]和下一项k=1。所以你看l[1]是3——你跳过了2!
所以:永远不要更改您迭代的列表
这是一个成功的方法,但为什么我的方法不起作用?
您可以使用del:
l = [1, 2, 3, 4]
del l[2]
print l
[1, 2, 4]
为什么是A?1?我可能一开始就不明白这个问题?
del和list1.remove相同。问题不在这里!