Python 初学者求助

2019-03-06 17:26:33 +08:00
 zblc4c4
问题:整数数列列表 a,例如 random.shuffle([i for i in range(10000)])
整数 b,例如 5000
a 中所有小于 b 的元素组成新列表 c,a 中剩余元素组成新列表 d

目标条件:效率最高,计算时间优先,不考虑内存占用

我能想到的两种思路:
1 )使用 for 循环对每个元素判断,append 到对应列表
2 ) c = [x for x in a if x < b] d = [x for x in a if x >= b]
1 中 append 函数严重影响效率,2 中每次比较大小用了 2 遍,因为是新手,经验不足,想不到两全其美的方法,希望能得到大佬指教
3144 次点击
所在节点    Python
26 条回复
xiaoke0718
2019-03-06 19:23:43 +08:00
你怎么会看得懂?我学习这么久了怎么还是看不懂.....
xpresslink
2019-03-06 22:05:00 +08:00
建议楼主学习一下 numpy.array,什么都不改同样的事情就比 list 性能高百倍以上。
实在不行也要用 array.array 做这些操作,比 list 也快得多。
WXG999
2019-03-06 22:43:11 +08:00
@xiaoke0718 有其他语言基础呗
cyspy
2019-03-07 00:20:39 +08:00
这里的主要问题是 python 中 list 这个数据结构的 append 性能太差,算法复杂度上没什么问题
leis1015
2019-03-07 07:42:51 +08:00
这么纠结性能你用啥 python 啊

会点别的需要写性能要求高部分,python 当胶水就好了,毕竟那么多库都这样干的…
necomancer
2019-03-08 12:03:38 +08:00
numpy 版:
a = np.array(a)
flag = a < b
c = a[flag]
d = a[np.logical_not(flag)]

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

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

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

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

© 2021 V2EX