我正在尝试编写一个从列表中删除重复项的程序,但我的程序在第 5 行不断抛出错误“列表索引超出范围” if n/(sequence[k]) == 1:。我无法弄清楚这一点。我认为“k”的可能值为 0、1 和 2 是否正确?将其中任何一个作为可能索引范围之外的索引的“序列”如何?
def remove_duplicates(sequence):
new_list = sequence
for n in sequence:
for k in range(len(sequence)):
if n/(sequence[k]) == 1:
new_list.remove(sequence[k])
print new_list
remove_duplicates([1,2,3])
Run Code Online (Sandbox Code Playgroud)
我强烈建议阿卡瓦尔的回答:
list(set(your_list))
Run Code Online (Sandbox Code Playgroud)
至于为什么会出现超出范围的错误:Python 通过引用传递,即序列和 new_list 仍然指向相同的内存位置。更改 new_list 也会更改顺序。
最后,您将项目与自身进行比较,然后将其删除。所以基本上即使你使用了序列的副本,例如:
new_list = list(sequence)
Run Code Online (Sandbox Code Playgroud)
或者
new_list = sequence[:]
Run Code Online (Sandbox Code Playgroud)
它将返回一个空列表。
| 归档时间: |
|
| 查看次数: |
1660 次 |
| 最近记录: |