【发布时间】:2026-02-24 06:00:02
【问题描述】:
我正在解决这篇帖子提出的问题:Fast way to remove a few items from a list/queue
基本上我想做的就是在 C 中实现一个 for 循环。for 循环需要访问一个生成器并能够删除数组的元素(并增加一个整数)。我的内心告诉我这会非常困难,但另一部分说它可以在几分钟内完成。
我没有编写高级 C 的经验(不过我已经为微控制器编写过代码),而 ctypes 和其他 c-> python 的教程似乎正在解决更困难的问题。
def forfilt():
marked = (i for i, x in enumerate(b) if tokeep(x))
shift = 0
for n in marked:
del b[n - shift]
shift += 1
我要问两个问题:
这很难吗?
您有什么建议/想自己编写代码吗? :D
实际上,这对我来说似乎是一个相当重要的问题。我不知道有什么方法可以快速完成最初的问题。我想如果你知道这个问题的答案,那么这个问题就是无效的。
【问题讨论】:
-
为什么你认为 C 会比原生 Python 代码更快?
-
因为 for 循环是出了名的慢,而这不能通过压缩来解决。
-
为什么不使用 Cython 或者 ShedSkin?
-
在 C 中实现的给定代码将比使用过滤器或列表推导式更慢。每次使用 del 时,它都会将列表中的所有内容都转移过来,多次这样做是一种浪费。只需使用过滤器或列表推导,您不会通过转到 C 来获得更好的速度。
-
@Winston Ewert:谢谢。我什至没有考虑列表如何工作的内部结构。我想我认为他们的工作方式不同。