草庐IT

python - 将排列应用于列表的就地方法? (与按键排序相反)

这是我想做的一个例子spam_list=["We","are","the","knights","who","say","Ni"]spam_order=[0,1,2,4,5,6,3]spam_list.magical_sort(spam_order)print(spam_list)["We","are","the","who","say","Ni","knights"]我可以用enumerate、list等等,但我想直接影响spam_list,比如list.sort()而不是像sorted()那样复制它编辑:推送一个字符串示例以避免索引和spam_list的值之间的混淆编辑:原来这是P

python - Pandas concat 是就地函数吗?

我想这个问题需要对concat的实现有一些了解。比如说,我有30个文件,每个1G,我最多只能使用32G内存。我将文件加载到名为“list_of_pieces”的DataFrame列表中。这个list_of_pieces的大小应该是~30G,对吧?如果我执行pd.concat(list_of_pieces),concat是否会在堆中分配另一个30G(或者可能是10G15G)并执行一些操作,或者它在没有的情况下“就地”运行连接分配新内存?有人知道吗?谢谢! 最佳答案 答案是否定的,这不是就地操作;np.concatenate在后台使用,

python - 就地替换python中列表中所有出现的元素

这个问题在这里已经有了答案:ReplacevaluesinlistusingPython[duplicate](7个答案)关闭8年前。假设我有一个列表:myl=[1,2,3,4,5,4,4,4,6]in-place(双重强调)用替换所有出现的4的最有效和最简单的pythonic方法是什么>44?我也很好奇为什么没有一个标准的方法来做到这一点(尤其是当strings有一个not-in-placereplace方法)?

python - 应该使用哪个运算符(+ vs +=)来提高性能? (就地与不就地)

假设我在python中有这两段代码:1--------------------------importnumpyasnpx=np.array([1,2,3,4])y=xx=x+np.array([1,1,1,1])printy2--------------------------importnumpyasnpx=np.array([1,2,3,4])y=xx+=np.array([1,1,1,1])printy我认为y的结果在两个示例中都是相同的,因为y指向x和x变成(2,3,4,5),但是它不是结果是(1,2,3,4)for1和(2,3,4,5)for2。经过一些研究,我发现在第一个

python - 为什么在 Pandas Series 上调用 .sort() 函数会就地对其值进行排序并且什么都不返回?

这个问题在这里已经有了答案:Sortingapandasseries(1个回答)关闭3年前。抱歉,我想我在这里遗漏了一些非常基本的东西:>>>Series([3,4,0,3]).sort()输出无,而>>>Series([3,4,0,3]).order()20033314dtype:int64我在sort()中遗漏了什么?谢谢编辑:感谢您的回答,我现在确实意识到这是正确的排序。但是我不明白为什么>>>s=Series([3,4,0,3]).sort()>>>s不返回排序后的系列。如果我明白themanual它应该返回排序到位的系列。

python - 在 python 中是否有相当于 'map' 的就地等效项?

我有一个需要清理的字符串列表。我有一种sanitizer它们的方法,所以我可以这样做:new_list=map(Sanitize,old_list)但我不需要保留旧列表。这让我想知道是否有一个就地等同于map。很容易为它编写一个for循环(或自定义就地映射方法),但是是否有内置的东西? 最佳答案 答案很简单:不。当答案不时,“XXX是否存在”形式的问题往往不会得到直接回答,所以我想我应该把它放在那里。大多数itertools助手和内置函数都在通用迭代器上运行。map、filter、列表理解、for——它们都在迭代器上工作,而不是修改

python - 如何通过就地过滤来修改 python 集合?

我想知道,Python中是否有办法在不创建新集合的情况下修改集合。例如:lst=[1,2,3,4,5,6]new_lst=[iforiinlstifi>3]工作正常,但创建了一个新集合。Python集合缺少可就地修改集合对象的filter()方法(或类似方法)是否有原因? 最佳答案 如果您想就地执行此操作,只需使用lst[:]=[iforiinlstifi>3]这won'tbefasterorsaveanymemory,但如果这是您需要的语义,它会更改对象。 关于python-如何通过就

python - numpy 的就地操作(例如 `+=` )如何工作?

基本问题是:在执行以下操作时会发生什么:a[i]+=b?鉴于以下情况:importnumpyasnpa=np.arange(4)i=a>0i=array([False,True,True,True],dtype=bool)我的理解是:a[i]=x和a.__setitem__(i,x)一样,直接赋值给ia+=x与a.__iadd__(x)相同,即原地加法但是当我这样做时会发生什么:a[i]+=x具体来说:这和a[i]=a[i]+x一样吗?(这不是就地操作)在这种情况下,如果i是:int索引,或者一个ndarray,或者一个切片对象背景我开始研究这个的原因是我在处理重复索引时遇到了一个非直

python - 更改子类 `ndarray` 就地 View

假设我有一个简单的Test类,它继承自numpy.ndarray(documentationonndarraysubclassing)。此类创建一个对象,该对象是另一个ndarray的部分View。现在我想创建一个方法来就地修改这个View。像这样的东西:importnumpyclassTest(numpy.ndarray):def__new__(cls,info='Testclass'):base=numpy.ndarray.__new__(cls,(6,2),dtype=float)view=base[0:2,:]view.info=inforeturnviewdef__array

Python:就地映射

这个问题在这里已经有了答案:Isthereanin-placeequivalentto'map'inpython?(4个答案)关闭6年前。我想知道是否有办法在某些东西上运行map。map的工作方式是它接受一个可迭代对象并将一个函数应用于该可迭代对象中的每个项目,从而生成一个列表。有没有办法让map修改可迭代对象本身?