Python Set 中的元素数量

新手上路,请多包涵

我有一个已拨电话号码列表 (nums_dialed)。我还有一组电话号码,这些电话号码是客户办公室的号码(client_nums)我如何有效地计算出我给特定客户打了多少次电话(总计)

例如:

 >>>nums_dialed=[1,2,2,3,3]
>>>client_nums=set([2,3])
>>>???
total=4

问题是我有一个很大的数据集:len(client_nums) ~ 10^5;和 len(nums_dialed) ~10^3。

原文由 Tim 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 467
2 个回答

哪个客户的办公室里有 10^5 号码?你为整个电话公司工作吗?

反正:

 print sum(1 for num in nums_dialed if num in client_nums)

那会尽快给你号码。


如果你想为多个客户端做这件事,使用相同的 nums_dialed 列表,那么你可以先缓存每个数字上的数据:

 nums_dialed_dict = collections.defaultdict(int)
for num in nums_dialed:
    nums_dialed_dict[num] += 1

然后将每个客户端上的那些相加:

 sum(nums_dialed_dict[num] for num in this_client_nums)

这比为每个客户再次遍历整个数字列表要快得多。

原文由 nosklo 发布,翻译遵循 CC BY-SA 2.5 许可协议

使用 Python 2.7 中的 collections.Counter:

 dialed_count = collections.Counter(nums_dialed)
count = sum(dialed_count[t] for t in client_nums)

原文由 user97370 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏