使用具有多个元素的set函数获取唯一列表

时间:2015-11-02 06:20:04

标签: python list set

来自python的新手(以及一般脚本)的两部分问题:

我已经研究了如何从文件中获取IP地址列表,然后将一组唯一的IP输出到文件中,如下所示:

ip_list = []

with open('testfile', 'r') as file:
  for line in file:
    if line not in ip_list:
      ip_list.append(line)

with open('testoutput', 'w') as file:
  for line in ip_list:
    file.write("%s\n" % line)

然后我看到我可以这样做另一种方式,我想知道这是否合理?

ip_list = []

with open('testfile', 'r') as file:
  for line in file:
    ip_list.append(line)

with open('testoutput', 'w') as file:
  for line in set(ip_list):
    file.write("%s\n" % line)

接下来,我现在想得到一个与PERMIT / DENY字符串结合的IP地址列表,因为打开的文件是这样的:

1.1.1.1 PERMIT
2.2.2.2 PERMIT
3.3.3.3 DENY
1.1.1.1 PERMIT

我仍然只想输出唯一的IP,所以我可以使用第一种方法:

 ip_list = []

 with open('testfile', 'r') as file:
   for line in file:
     elements = line.split(' ')
     if elements[0] not in ip_list
       ip_list.append(elements)

 with open('testoutput', 'w') as file:
   for line in ip_list:
     file.write("%s %s\n" % (line[0], line[1]))

但是我可以使用set命令代替吗?或者我可以做一些比上面的片段更好的东西吗? 对于这个例子,假设我不想比较整行的唯一性(即' 1.1.1.1 PERMIT')

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

ip_set = set()
ip_list = []

with open('testfile', 'r') as file:
    for line in file:
        elements = line.split()
        ip = elements[0]
        if ip not in ip_set
            ip_set.add(ip)
            ip_list.append(elements)

with open('testoutput', 'w') as file:
    for line in ip_list:
        file.write("%s %s\n" % (line[0], line[1]))

请注意,我将参数移除到split(),以便它可以处理所有空格,而不仅仅是空格。