首页 > 解决方案 > 这个 C 交换宏是否有等效的 Python 3 代码?

问题描述

这是我在 C 中使用的代码。这似乎是一个简单的变量交换。

#define ELEM_SWAP(a,b) { register double t=(a);(a)=(b);(b)=t; }

但我看到它是这样称呼的

ELEM_SWAP(array[x], array[y]). 

我正在尝试使用 numpy 数组在 Python 3 中模拟这个宏。我最接近的等价物是这个函数,但似乎 C 代码交换了变量,而 Python 交换了列表中的项目。

def elem_swap(mylist, x, y):
    mylist[x], mylist[y] = mylist[y], mylist[x]
    return mylist

标签: pythoncpython-3.xnumpy

解决方案


C#define是一个文本处理指令。它只是替换文本

所以,这段代码:

ELEM_SWAP(array[x], array[y]) 

被这个取代:

{ register double t=(array[x]);(array[x])=(array[y]);(array[y])=t; }

这将交换变量内容。如果你尝试过类似的事情,ELEM_SWAP(1, 1)它会失败。

没有办法用它的全部功能在 python 代码中翻译这个宏。但是如果我们需要一个类似的列表;那么你的功能就足够好了。除了我会删除该return部分,除非您真的需要它((请记住,您返回的是相同的列表,而不是它的副本))

def elem_swap(mylist, x, y):
    mylist[x], mylist[y] = mylist[y], mylist[x]

这将像这样使用:

lst = [1.0, 2.3, 4.6, 3.9]
elem_swap(lst, 1, 2)

推荐阅读