使用嵌套列表[machine#,job#]在3台计算机上计划4个作业
schedule = [[1, 0], [2, 1], [3, 2], [3, 3]]
我想计算一下机器3的使用频率。
我尝试使用schedule.count(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
相比,这节省了空间。该求和利用了bool
是int
的子类型这一事实。
答案 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
最后,如果您只想计算一台机器的出现次数,那么两种方法都可以很好地工作;如果您想要多台机器的出现,例如1
和3
,我建议您使用{{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
。使用_
只是意味着忽略第二个值。
进一步