python - 不使用 set() 删除重复项

标签 python duplicates

我有一个 .txt 文件,其中包含 IP、时间、搜索查询和访问的网站。我使用 for 循环将它们分解为列表的相应索引,然后将所有这些列表放入一个更大的列表中。

打印时可能看起来像这样......

['4.16.159.114', '08:13:37', 'french-english dictionary', 'humanities.uchicago.edu/forms_unrest/FR-ENG.html\n']
['4.16.186.203', '00:13:54', 's.e.t.i.', 'www.seti.net/\n']
['4.16.189.59', '05:48:58', 'which is better http upload or ftp upload', 'www.ewebtribe.com/htmlhelp/uploading.htm\n']
['4.16.189.59', '06:50:49', 'cgi perl tutorial', 'www.cgi101.com/class/\n']
['4.16.189.59', '07:16:28', 'cgi perl tutorial', 'www.free-ed.net/fr03/lfc/course%20030207_01/\n']

我到达这里的代码看起来像这样,这只是我从文本文件中抓取这些数据,并将其放入列表中,然后写入另一个文本文件。

import io

f = io.open(r'C:\Users\Ryan Asher\Desktop\%23AlltheWeb_2001.txt', encoding="Latin-1")
p = io.open(r'C:\Users\Ryan Asher\Desktop\workfile.txt', 'w')

sweet = [] 

for line in f:
    x = line.split("     ")
    lbreak = x[0].split("\t")
    sweet.append(lbreak)

for item in sweet:
    p.write("%s\n" % item)

我的问题是每个列表中的第三个索引,在甜蜜列表或 [2] 中,这是搜索查询(法语-英语词典、s.e.t.i 等)。我不想在“甜蜜”列表中出现多个。

因此,如果它显示“cgi perl 教程”两次,我需要删除“cgi perl 教程”的其他搜索,只保留甜蜜列表中的第一个搜索。

我不认为我不能为此使用 set,因为我只希望它应用于搜索查询的第三个索引,并且我不希望它消除相同 IP 的重复项,或者其他之一。

最佳答案

lbreak[2] 添加到集合中,仅附加 lbreak[2] 不在集合中的行,例如:

sweet = [] 
seen = set()

for line in f:
    x = line.split("     ")
    lbreak = x[0].split("\t")
    if lbreak[2] not in seen:
        sweet.append(lbreak)
        seen.add(lbreak[2])

关于python - 不使用 set() 删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39262034/

相关文章:

python - paramiko立即打印exec_command结果

python - 如何为特定列的每个不同值选择一行并合并以在 Python 中形成一个新的数据框?

php - 如何检测 foreach 数据库查询中的重复项

c - 查找数组中的重复项

mysql - 仅删除 Mysql 中的重复记录

r - R 中相同最大列值的列表

python - ModuleNotFoundError:没有名为 'pycaret.arules' 的模块

python - 使用 re.sub 从文本中删除特定字符

mysql - 在这种情况下使用外键(MySQL)是否明智?

python - 当我将它链接在一起时,为什么这个重复数据删除代码不起作用?