求解, python3,当数据大的时候,怎么列出全部排序可能?

2021-05-06 05:25:42 +08:00
 996bujiaban

有 999 个数,[000,001,002,...,999]
每 2 个组合成一对,

('000', '001')
('000', '002')
('000', '003')
('001', '002')
('001', '003')
('002', '003')
.............
当 2 个一组时,有 498501 种组合,显示打印出来耗费:3.6621711 秒
当 3 个一组时,有 165668499 种组合,显示打印出来耗费:20.6741886 秒
.............

请问当 400 个一组时,有多少种组合?怎么在 10 秒完成?

我需要对每组数据进行统计编号,

1:('000', '001')
2:('000', '002')
3:('000', '003')
这岂不是非常占用内存空间?有什么更快速,更优雅的写法吗

import itertools
import time


z=[]
for i in range(0,999):
    if i<10:
        i = '00'+str(i)
    elif 10<=i and i<100:
        i ='0'+str(i)
    else:
        i=str(i)
    z.append(str(i))
# 计时开始
start = time.perf_counter()


# 排序全部组合
z2 =(itertools.combinations((z), 3))
end = time.perf_counter()
print('排序组合耗费:',end-start)

c=0
for i in z2:
    c+=1
print('组合数:',c)

# 计时结束
end = time.perf_counter()
print('一共耗费:',end-start)
2841 次点击
所在节点    Python
21 条回复
julyclyde
2021-05-08 10:57:06 +08:00
我觉得关键是你不应该先把它括起来然后再循环

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

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

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

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

© 2021 V2EX