Python中的嵌套列表或二维数组

时间:2019-11-27 01:10:13

标签: python arrays list multidimensional-array nested-lists



我有一个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地址及其计数。

2 个答案:

答案 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.