Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有类似STL接口的Python列表_C++_Python_Stl - Fatal编程技术网

C++ 具有类似STL接口的Python列表

C++ 具有类似STL接口的Python列表,c++,python,stl,C++,Python,Stl,我必须将一个C++ STL应用程序移植到Python。我是一个Python新手,但已经编程十多年了。我对STL有很多经验,发现它让我迷上了使用C++。过去几天,我一直在谷歌上搜索以下项目: Python STL(希望利用我多年的STL经验) Python链表 Python高级列表用法 Python列表优化 Python有序集 并且已经找到了关于上述主题的帖子,关于Python列表的教程,它们显然不是高级的,或者是死路一条。我真的很惊讶我没有成功,我想我只是因为过度工作和输入糟糕的搜索词而精疲力尽

我必须将一个C++ STL应用程序移植到Python。我是一个Python新手,但已经编程十多年了。我对STL有很多经验,发现它让我迷上了使用C++。过去几天,我一直在谷歌上搜索以下项目:

  • Python STL(希望利用我多年的STL经验)
  • Python链表
  • Python高级列表用法
  • Python列表优化
  • Python有序集
  • 并且已经找到了关于上述主题的帖子,关于Python列表的教程,它们显然不是高级的,或者是死路一条。我真的很惊讶我没有成功,我想我只是因为过度工作和输入糟糕的搜索词而精疲力尽

    (我的问题)我可以得到一个Python STL包装器,或者一个类似于STL的Python列表接口吗?如果没有,有人能给我指一本关于管理非常大的非平凡对象分类集合的真正高级教程或论文吗

    另外,我可以很容易地为一个或两个用途实现变通方法,但是如果管理层想要移植更多的代码,我想立即用等效的Python代码替换我找到的任何STL代码。是的,我已经测量过了,确实需要完全优化的代码!我不能只做多余的排序和搜索

    (增编)感谢您的回复,我已经查阅了一些参考资料,我很高兴。针对这里的一些评论:

    1-它正被移植到python,因为管理层这么说,我还是不去管它吧-如果它没有坏,为什么要修复它

    2-非平凡对象的高级列表用法,我的意思是:排序和比较对象的多种不同方法,而不是一种cmp方法。我想拼接、排序、合并、搜索、插入、删除和合并列表。我想要列表迭代器的列表,我想要避免复制

    3-我现在知道内置列表实际上是数组,我应该寻找一个不同的python类。我想这是我困惑的根源

    4-当然,我正在学习用Python的方式做事,但我也有最后期限。我正在移植的STL代码工作正常,我希望对其进行尽可能少的更改,因为这会引入bug


    感谢大家的投入,我非常感激。

    < 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]