gpt4 book ai didi

python - set() 不删除重复项

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:46 24 4
gpt4 key购买 nike

我正在尝试使用正则表达式在文件中查找 IP 地址的唯一实例。我发现它们很好,并尝试将它们附加到列表中,稍后尝试使用 set()在我的列表中删除重复项。我发现每个项目都可以,并且有重复项,但我无法简化列表。打印 my set 的输出与将 ips 打印为列表的输出相同,没有删除任何内容。

ips = [] # make a list
count = 0
count1 = 0
for line in f: #loop through file line by line
match = re.search("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", line) #find IPs
if match: #if there's a match append and keep track of the total number of Ips
ips.append(match) #append to list
count = count + 1
ipset = set(ips)
print(ipset, count)

这个字符串 <_sre.SRE_Match object; span=(0, 13), match='137.43.92.119'>在尝试 set() 之前和之后在输出中出现 60 多次名单

最佳答案

您没有存储匹配的字符串。您正在存储 re.Match objects .即使它们匹配相同的文本,它们也不会比较相等,因此它们都被 set 对象视为唯一:

>>> import re
>>> line = '137.43.92.119\n'
>>> match1 = re.search("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", line)
>>> match1
<_sre.SRE_Match object; span=(0, 13), match='137.43.92.119'>
>>> match2 = re.search("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", line)
>>> match2
<_sre.SRE_Match object; span=(0, 13), match='137.43.92.119'>
>>> match1 == match2
False

改为提取匹配的文本:

ips.append(match.group()) #append to list

matchobj.group()不带参数返回匹配的字符串部分(第 0 组):

>>> match1.group()
'137.43.92.119'
>>> match1.group() == match2.group()
True

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com