我有一个IP地址列表。我需要将这些IP地址存储在列表或数组中(不允许重复),并存储其计数。
例如我有
Uncaught TypeError: Cannot read property 'addEventListener' of null
此列表来自.txt文件。我有多个文件,所以不能将这样的IP-1
IP-4
IP-7
IP-4
IP-2
IP-4
IP-2
放在代码中(我的意思是不要在代码中静态地执行此操作,因为对于每个.txt文件,列表都会不同)。
< br />
因此,在此列表中,我有:
IP-1 1x
IP-4 3x
IP-7 1x
IP-2 2x
我必须将其全部存储在一个列表或数组中。例如这样的
list = [ [a,b], [c,d], [e,f] ]
现在我必须在此列表/数组中搜索出现次数最多的IP,并将其打印出来。例如:
list_of_ips_and_their_counts = [ [IP-1,1], [IP-4,3], [IP-7,1], [IP-9,2] ]
我不确定如何存储IP地址及其计数。
答案 0 :(得分:1)
您可以使用collections.Counter
对文件中的每个IP-{number}
行进行计数:
from collections import Counter
with open("test.txt") as f:
ip_counts = Counter(line.strip() for line in f)
# Counter({'IP-4': 3, 'IP-2': 2, 'IP-1': 1, 'IP-7': 1})
for ip_address, count in ip_counts.items():
print("IP address %s occured %d times" % (ip_address, count))
输出:
IP address IP-1 occured 1 times
IP address IP-4 occured 3 times
IP address IP-7 occured 1 times
IP address IP-2 occured 2 times
如果您愿意,也可以使用map()
来计数行数:
ip_counts = Counter(map(str.strip, f))
注意::str.strip()
在此处用于从键中去除空格,例如将'IP-1\n'
转换为IP-1
。由于您不需要包含空格,因此将来可以更轻松地访问密钥。
如果您想要最大数量,我可以将max()
与operator.itemgetter()
结合使用:
print(max(ip_counts.items(), key=itemgetter(1)))
# ('IP-4', 3)
使用索引1
的计数返回最大元组。
答案 1 :(得分:0)
您可以使用np.argmax()
进行操作。这是您问题的第二步。但是最好每个线程问一个问题。
import numpy as np
result = ip[np.argmax(np.array(ip)[:, 1])]
print("IP address " + result[0] + " occured " + str(result[1]) + " times.")
Out[114]: IP address IP-4 occured 3 times.