计算嵌套列表中第一位置的相同元素

时间:2018-10-20 12:07:47

标签: python list count

使用嵌套列表[machine#,job#]在3台计算机上计划4个作业

schedule = [[1, 0], [2, 1], [3, 2], [3, 3]]

我想计算一下机器3的使用频率。

我尝试使用schedule.count(3),但没有得到任何输出,我想它仍然会检查所有元素。

3 个答案:

答案 0 :(得分:0)

您可以使用列表推导提取3号计算机上的作业,然后检查其长度:

int socket_desc, read_size, client_address_len, audio; int 
*s_rate, *s_size, *channels; struct sockaddr_in server; 
struct sockaddr_in client_address; char file_name[1024]; 
 char content[1024], rate[1024], size[1024], ch[1024]; // 
 malloc(sizeof(int), 1) // free(s_rate) s_rate = (int *) 
  malloc(sizeof(int)); s_size = (int *) malloc(sizeof(int)); 
channels = (int *) malloc(sizeof(int)); socket_desc = 
 socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); 
  if(socket_desc < 0){ printf("error creating socket\n"); 
  return 1; } – Omri Ram 6 mins ago   delete
 server.sin_family = AF_INET; server.sin_port = 
 htons(2018); server.sin_addr.s_addr = 
htonl(INADDR_ANY); if(bind(socket_desc, (struct 
 sockaddr * )&server, sizeof(server)) < 0){ printf("error 
 binding socket \n"); return 1; } 

答案 1 :(得分:0)

schedule.count(3)计算schedule中多少个元素等于3。您可以轻松地看到它们都不是。毕竟,元素是列表。

但是,您可以将sum与适当的生成器表达式一起使用:

sum(x[0] == 3 for x in schedule)
# 2

与构建list并在其上调用len相比,这节省了空间。该求和利用了boolint的子类型这一事实。

答案 2 :(得分:0)

要使用count,您需要创建计算机列表(通过从配对列表中提取每台计算机)并计算3的出现次数,例如:

schedule = [[1, 0], [2, 1], [3, 2], [3, 3]]
lst_count = [ma for ma, _ in schedule].count(3)  # using list and count

上述方法效率低下,因为它会创建一个列表并对其应用计数。一种更有效的方法是使用@schwobaseggl建议的生成器表达式,以下是建议的生成器的替代方法:

schedule = [[1, 0], [2, 1], [3, 2], [3, 3]]
gen_count = sum(1 for ma, _ in schedule if ma == 3)  # using a generator

最后,如果您只想计算一台机器的出现次数,那么两种方法都可以很好地工作;如果您想要多台机器的出现,例如13,我建议您使用{{3} }:

from collections import Counter

schedule = [[1, 0], [2, 1], [3, 2], [3, 3]]
counts = Counter(ma for ma, _ in schedule)  # using Counter
print(counts[3])
print(counts[1])

输出

2
1

更新

除上述方法外,您还可以使用一个简单的for循环和一个计数器变量:

schedule = [[1, 0], [2, 1], [3, 2], [3, 3]]

counter = 0
for ma, _ in schedule:
    if ma == 3:
        counter += 1
print(counter)  # 2

注意

ma, _ = x表示称为拆包。当您编写ma, _时,Python期望schedule列表中的每个元素都是一对元素。例如,x, y = [1, 2]将值1分配给x,并将值2分配给y。使用_只是意味着忽略第二个值。

进一步

  1. Counter