C++ 具有类似STL接口的Python列表
我必须将一个C++ STL应用程序移植到Python。我是一个Python新手,但已经编程十多年了。我对STL有很多经验,发现它让我迷上了使用C++。过去几天,我一直在谷歌上搜索以下项目:C++ 具有类似STL接口的Python列表,c++,python,stl,C++,Python,Stl,我必须将一个C++ STL应用程序移植到Python。我是一个Python新手,但已经编程十多年了。我对STL有很多经验,发现它让我迷上了使用C++。过去几天,我一直在谷歌上搜索以下项目: Python STL(希望利用我多年的STL经验) Python链表 Python高级列表用法 Python列表优化 Python有序集 并且已经找到了关于上述主题的帖子,关于Python列表的教程,它们显然不是高级的,或者是死路一条。我真的很惊讶我没有成功,我想我只是因为过度工作和输入糟糕的搜索词而精疲力尽
感谢大家的投入,我非常感激。
< P>如果我是你,我会花时间学习如何正确地使用Python中可用的各种数据结构,而不是寻找与C++所知道的类似的东西。p> 这并不是说你在寻找新奇的东西,只是在处理一些数据结构。那样的话,我会把你介绍给我这样做,“Python”方式会帮助你,更重要的是未来的维护者,他们会想知道为什么你在Python中尝试C++编程。 <> P>只是为了增加你的胃口,也没有理由把<强> >喜欢/强> STL的样式到Python(并且作为记录,我也是一个C++程序员,知道STL),考虑构建列表并遍历它的最简单的例子:
蟒蛇的方式:mylist = [1, 2, 3, 4]
for value in mylist:
# playaround with value
Python中的STL方式(为了类似STL,我编造了这个):
mylist = [1, 2, 3, 4]
mylistiter = mylist.begin()
while mylistiter != mylist.end():
value = mylistiter.item()
mylistiter.next()
如果我是你,我会花时间学习如何正确地使用Python中可用的各种数据结构,而不是寻找与C++所知道的类似的东西。p> 这并不是说你在寻找新奇的东西,只是在处理一些数据结构。那样的话,我会把你介绍给我
这样做,“Python”方式会帮助你,更重要的是未来的维护者,他们会想知道为什么你在Python中尝试C++编程。 <> P>只是为了增加你的胃口,也没有理由把<强> >喜欢/强> STL的样式到Python(并且作为记录,我也是一个C++程序员,知道STL),考虑构建列表并遍历它的最简单的例子:
蟒蛇的方式:mylist = [1, 2, 3, 4]
for value in mylist:
# playaround with value
Python中的STL方式(为了类似STL,我编造了这个):
mylist = [1, 2, 3, 4]
mylistiter = mylist.begin()
while mylistiter != mylist.end():
value = mylistiter.item()
mylistiter.next()
对于人们通常使用的类似链表的操作
您需要什么操作来快速执行?二等分?插入?用于人们通常使用的类似链表的操作 您需要什么操作来快速执行?二等分?插入?Python STL(希望利用我多年的STL经验)-从ABC系列开始学习Python的功能 Python链表。Python列表具有链接列表所需的所有功能 Python高级列表用法。这是什么意思 Python列表优化。这是什么意思 Python有序集。你在这里有几个选择;您可以创建自己的“有序集”,作为丢弃重复项的列表。您可以将heapq子类化,并添加丢弃重复项的方法: 然而,在许多情况下,维护有序集的成本实际上过高,因为它只能在算法结束时被排序一次。在其他情况下,“有序集”实际上是一个heapq——您从不需要类似于集合的特性,只需要排序 不平凡的。 (我猜你所说的“不平凡”是什么意思)。所有Python对象都是等效的。没有“平凡”与“非平凡”的对象。它们都是一流的对象,并且在没有任何实际工作的情况下都具有“非平凡”的复杂性。这不是C++,其中有原始的(非对象)值浮动。在Python中,一切都是对象 管理层期望值。 大多数情况下,Python中不存在C++大脑痉挛。以显而易见的方式使用显而易见的Python类,代码就会少得多。代码量的减少是一大胜利。通常,将C++转换为Python的管理原因是为了消除C++的复杂度。 Python代码将更简单,使其更可靠,更易于维护 虽然Python的速度通常比
allItems = [... some list of items, perhaps from a database query ...]
validItems = [it for it in allItems if it.isValid()]
validItems = []
for it in allItems:
if it.isValid():
validItems.add(it)
# get list of indexes of items to be removed
removeIndexes = []
for i in range(len(allItems)):
if not allItems[i].isValid():
removeIndexes.add(i)
# don't forget to remove items in descending order, or later indexes
# will be invalidated by earlier removals
sort(removeIndexes,reverse=True)
# copy list
validItems = allItems[:]
# now remove the items from allItems
for idx in removeIndexes:
del validItems[i]