如何在循环中从列表中删除项目

时间:2019-11-05 18:10:18

标签: python-3.x

unknown_list = ["toby", "James", "kate", "George", "James", "rick", "Alex", "Jein", "Alex", "Alex", "George", "Jein", "kate", "medelin"]

for i in range(len(unknown_list)):
    item = unknown_list[i]
    unknown_list[i] = item.replace(item[0], item[0].upper())

x = 0
for b in range(0, len(unknown_list)):
    if unknown_list[b] in unknown_list[b+1:]:
        unknown_list.remove(unknown_list[b])
        x += 1


print(x)
print(unknown_list)

我很困。第9行有错误。我需要从列表中删除重复项(我无法使用尚未学习的功能,这就是为什么我要编写这样的代码)

4 个答案:

答案 0 :(得分:1)

这是一种更简单的方法。 有一个内置的函数叫做set

print(list(set(unknown_list)))

output:
['Jein', 'Alex', 'James', 'toby', 'George', 'rick', 'medelin', 'kate']

引用:https://www.geeksforgeeks.org/sets-in-python/

答案 1 :(得分:0)

这是单线的:list(set(source_list))将解决问题。

集合是不可能重复的东西。

答案 2 :(得分:0)

发生索引错误是因为在n项列表中有n-1个索引(因为我们从list [0]开始)

unknown_list = ["toby", "James", "kate", "George", "James", "rick", "Alex", "Jein", "Alex", "Alex", "George", "Jein", "kate", "medelin"]

for i in range(len(unknown_list)):
    item = unknown_list[i]
    unknown_list[i] = item.replace(item[0], item[0].upper())

a=1

for b in range (0, len(unknown_list)-1):
    if unknown_list[b] in unknown_list[a:]:
        unknown_list.remove(unknown_list[b])
        a +=1

print(unknown_list)

尽管迭代了x = 0,但您从未使用过它。但是,这也会从列表中删除所有名称,而不会保留第一个名称(因此,只剩下一次出现在列表中的名称)。

一种以所有唯一名称列表结尾的方法是创建一个空列表,然后附加不同的名称:

unknown_list = ["toby", "James", "kate", "George", "James", "rick", "Alex", "Jein", "Alex", "Alex", "George", "Jein", "kate", "medelin"]

for i in range(len(unknown_list)):
    item = unknown_list[i]
    unknown_list[i] = item.replace(item[0], item[0].upper())

distinct =[]

for i in unknown_list: 
    if i not in distinct: 
        distinct.append(i) 

答案 3 :(得分:0)

这应该有效:

unknown_list = ["toby", "James", "kate", "George", "James", "rick", "Alex", "Jein", "Alex", "Alex", "George", "Jein", "kate", "medelin"]

for i in range(len(unknown_list)):
    unknown_list[i] = unknown_list[i].upper()

print (unknown_list)

i = 0
n = len(unknown_list)
while i < n:
    item = unknown_list[i]
    if item in unknown_list[i+1:]:
        unknown_list.remove(item)
        n = n - 1
    else:
        i = i + 1

print (unknown_list)

说明:

从不for循环内的列表中删除元素。 从不。几乎可以肯定会遇到index out of range错误。而且即使您没有至少一半的元素也会被跳过。

一种解决方案是使用while循环。由于列表元素在移除后被向左移动,因此窍门是仅前进在没有元素被移除的情况下i索引。另一方面,如果删除了一个元素,您将保持原样(unknown_list[i]元素将成为要比较的移位元素),当然,您会减少列表中的元素总数({{1} }。

请确保您了解删除某个项目后列表发生了什么。您可以通过查看结果列表中元素的顺序来找出答案:

n

与输入列表相比:

['TOBY', 'JAMES', 'RICK', 'ALEX', 'GEORGE', 'JEIN', 'KATE', 'MEDELIN']