删除列表中的重复元素

时间:2019-09-18 21:41:52

标签: python python-3.x list duplicates

这是我工作了几个小时的家庭作业。已经取得了进步,但是我已经走到尽头了!我有一个文本文件,我已将其转换为以字母顺序排序的单词列表(包括一些大写单词)。最后要做的是从列表中删除 重复的单词 。我找到了有关从列表中删除项目的问题的答案,但没有找到关于 删除重复项 的问题的答案。我设置了一个循环,出于我无法理解的原因,该循环仅适用于原始列表的一半。

这是我尝试过的代码:

fhand=open('romeo.txt')
data=fhand.read()
data=data.split()
data[0]='but'
data[8]='it'
data[13]='juliet'
data[17]='arise'
data[25]='who'
data.sort()
newlist=[]
for x in data:
    if data[0] == data[1]:
        del data[0]
    elif data[0] != data[1]:
        newlist.append(data[0])
    del data [0]
print(newlist)

原始的分割文本文件为: [“但是”,“软”,“什么”,“浅”,“直通”,“超出”,“窗口”,“断点”,“它”,“是”,“该”,“东”,“和”,“朱丽叶”,“是”,“该”,“太阳”,“升起”,“公平”,“太阳”,“和” ,“杀死”,“该”,“羡慕”,“月亮”,“谁”,“是”,“已经”,“病”,“和”,“苍白”,“有”,“悲痛”] < / p>

预期输出为: [[已经”,“和”,“升起”,“休息”,“但是”,“东部”,“嫉妒”,“公平”,“悲痛” ,“是”,“它”,“朱丽叶”,“杀死”,“光”,“月亮”,“苍白”,“病”,“软”,“太阳”,“太阳”,“该”,“ “”,“ the”,“ through”,“ what”,“ who”,“ window”,“ with”,“ yonder”]

实际输出为: [[已经”,“和”,“升起”,“休息”,“但是”,“东部”,“嫉妒”,“公平”,“悲痛” ,“是”,“它”,“朱丽叶”,“杀死”,“光明”]

因此,循环执行了应该执行的操作,但是在“ light”之后退出了。无法解决这个问题。

1 个答案:

答案 0 :(得分:2)

这不是从列表中删除重复项的好方法。同样,在迭代列表时,您不应从列表中删除元素。考虑使用集合。集没有排序,但是由于在处理数据之前先对数据进行排序,因此可以使用sorted将无序集变成排序列表。

data = ['but', 'soft', 'what', 'light', 'through', 'yonder', 'window', 'breaks', 'it', 'is', 'the', 'east', 'and', 'juliet', 'is', 'the', 'sun', 'arise', 'fair', 'sun', 'and', 'kill', 'the', 'envious', 'moon', 'who', 'is', 'already', 'sick', 'and', 'pale', 'with', 'grief']

new_data = sorted(set(data))

print(new_data)

输出:

['already', 'and', 'arise', 'breaks', 'but', 'east', 'envious', 'fair', 'grief', 'is', 'it', 'juliet', 'kill', 'light', 'moon', 'pale', 'sick', 'soft', 'sun', 'the', 'through', 'what', 'who', 'window', 'with', 'yonder']

您还可以循环执行此操作,不设置任何集合,也不使用del

newlist = []

for x in sorted(data):
    if x not in newlist:
        newlist.append(x)
相关问题