提问人:user27606 提问时间:6/29/2023 最后编辑:user27606 更新时间:6/30/2023 访问量:40
找到两个列表/集并集大小的最快方法?编码效率
Fastest way to find the size of the union of two lists/sets? Coding Efficiency
问:
我正在研究Reddit上不同社区之间的关系。作为我数据研究的一部分,我有大约 49,000 个 CSV 用于我抓取的子,在我能获得的所有帖子中,我得到了每个评论员及其总业力和评论数量(格式见图片)每个 CSV 都包含我为该单个子收集的所有评论者。
我想获取每个潜艇,然后将其与另一个潜艇进行比较,并确定它们有多少共同的用户。我不需要列出他们是什么用户,只需要两者的共同点。我还想为我目前拥有的代码设置一个业力阈值,它设置为超过 30 业力。
对于我拥有的代码,我准备了两个超过阈值的用户列表,然后将这两个列表转换为集合,然后将它们“&”在一起。这是我的代码:
由于我一遍又一遍地重新阅读相同的 CSV 以相互比较,我是否可以准备它们以使其更有效,按字母顺序对用户名进行排序?我计划重做所有 CSV 以摆脱“删除用户”,这些用户都是机器人,我是否应该按业力而不是用户进行排序,而不是比较业力是否高于某个水平,它只读取到某个点?内存使用不是问题,只是速度。我有数十亿次比较要做,所以任何时间的减少都是值得赞赏的。
remove_list = dt.fread('D:/Spring 2023/red/c7/removal_users.csv')
drops = remove_list['C0'].to_list()[0]
def get_scores(current):
sub = dt.fread(current)
sub = pd.read_csv(current, sep=',', header =None)
current = get_name(current)
sub.columns = ['user','score']
sub = sub[~sub['user'].isin(drops)]
sub = sub[sub['score'] > 30]
names =list(sub['user'])
return names
def get_name(current):
current = current.split('/')[-1].split('.')[-2]
return current
def common_users(list1,list2):
return len(set(list1) & set(list2))
答:
1赞
ahmad
6/29/2023
#1
您是否尝试过使用 len() 函数,它用于查找列表的长度。len() 接受序列或集合作为参数。
评论
0赞
user27606
6/29/2023
我在普通用户的代码片段中使用了 len:“len(set(list1) & set(list2))”
上一个:我可以比较一列中值的频率吗?
下一个:在QGIS中比较数据
评论