python - 这个 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
解决方案
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)
推荐阅读
- html - 更改默认(禁用)选定选项的背景颜色
- android - 为什么我不能在 Android Studio 中引用 UI 元素?
- loops - 如何按行获取 txt 信息并将每一行拆分为单独的类
- c++ - 为什么我们可以 push_back 只用范围定义的子向量?
- netlogo - 模式效率:轮流灌谁号
- java - Google 云功能的本地部署失败并显示“javap -cp: Class not found”
- javascript - 通过rest api更新后如何切换react hooks中按钮的状态?
- apache-spark - Spark Cassandra 连接器控制每秒读取次数
- flutter - 如何将小部件放置在具有成比例大小和位置的小部件上方
- webpack - 如何根据 webpack 上导入的 html 生成新的 html?