Python list 数组 4 千万个元素去重、处理

2019-07-15 14:24:15 +08:00
 v2mo

如题
主要问题:千万级别处理起来会不会崩溃?

主要是去重

谢谢

4908 次点击
所在节点    Python
42 条回复
jdhao
2019-07-15 14:29:13 +08:00
自己做一个然后试一下不就知道了
yedanten
2019-07-15 14:31:24 +08:00
得看业务情况啊,不知道你后续的处理是要做哪些操作,否则只是去重,最简单粗暴的转换为 set 就完事了
shuax
2019-07-15 14:34:50 +08:00
推荐用 64 位 Python,加内存就是了。
lithiumii
2019-07-15 14:37:07 +08:00
list(set(li)
崩溃了就是你电脑不行!(滑稽
Takamine
2019-07-15 14:38:23 +08:00
既然都能打算一次性把 4000 个元素放到一个 list 里面操作,不如就直接再导入 Excel 去重:doge:。
chengxiao
2019-07-15 14:40:04 +08:00
这种建议直接上 MongoDB 然后设置索引唯一去重
nutting
2019-07-15 14:44:33 +08:00
内存里的操作怕啥,比数据库强多了,随便搞
ipwx
2019-07-15 14:45:54 +08:00
In [4]: N = 10**8

In [5]: arr = np.random.randint(0, N, size=N)

In [6]: len(arr)
Out[6]: 100000000

In [7]: %timeit set(arr)
36 s ± 122 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

给你一个时间作参考。。。
ytmsdy
2019-07-15 14:46:51 +08:00
先分段排序,然后去重。
v2mo
2019-07-15 14:47:07 +08:00
几千万的数据,一台电脑运行,有可行性吗?
wtks1
2019-07-15 14:47:35 +08:00
@Takamine excel 处理不了百万以上的行数吧
Universe
2019-07-15 14:48:32 +08:00
看精度要求,不高的话布隆过滤器可以一试
pcdRob
2019-07-15 14:48:41 +08:00
几千万而已 洒洒水啦
fuxiuyin
2019-07-15 14:49:13 +08:00
首先,这 4 千万个元素肯定是要便利一遍的,除非你的数据有什么特殊的规律。
其次,要看这 4 千万存在哪,内存?文件?网络?
最后,如果没有优化空间不可避免的要对 4 千万数据过一遍那就看想优化内存还是想优化时间了,不过最快可能也就是楼上 8 楼给的。
mengzhuo
2019-07-15 14:52:16 +08:00
4 千万 uint32,最大也就 40M 搞定了…… O ( N )操作而已
dji38838c
2019-07-15 14:53:53 +08:00
这样都不肯用 pandas 吗?
ruandao
2019-07-15 14:54:54 +08:00
布隆过滤器
ruandao
2019-07-15 14:55:57 +08:00
想了想, 好像不需要

千万,也就 MB 级别吧
janxin
2019-07-15 14:58:06 +08:00
数据都不说一下怎么分情况处理。

这种统一建议 list(set(data))
Takamine
2019-07-15 14:59:45 +08:00
@wtks1 你也说了是行数,要是每个元素都写进去单个 cell 里面不就够啦。:doge:

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/583069

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX