set()不删除重复项

2024-04-29 22:04:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用regex在一个文件中找到唯一的IP地址实例。我发现它们很好,并尝试将它们附加到一个列表中,然后尝试使用列表中的set()来删除重复项。我发现每一个项目都很好,有重复,但我不能让清单简化。打印“我的设置”的输出与打印IP作为列表相同,不会删除任何内容。在

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多次


Tags: 文件of实例列表ifmatchcountline
1条回答
网友
1楼 · 发布于 2024-04-29 22:04:24

您没有存储匹配的字符串。您正在存储^{} 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

而是提取匹配的文本:

^{pr2}$

不带参数的^{}返回匹配的字符串部分(组0):

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

相关问题 更多 >