Chaquopy:将 Java ArrayList/LinkedList 转换为 Python 数组

Posted

技术标签:

【中文标题】Chaquopy:将 Java ArrayList/LinkedList 转换为 Python 数组【英文标题】:Chaquopy: Convert Java ArrayList/LinkedList to Python Array 【发布时间】:2021-05-09 00:54:17 【问题描述】:

大家晚上好,

昨天我发现我们可以使用Chaquopy 从 Java 运行 Python 脚本。我玩了一下,遇到了以下问题:

ArrayList-Objects (resp. LinkedList-Objects),我已传递给 Python 脚本,但其行为与我预期的不同。在 Python 中,我不能只使用来自 Java 的 list[index]ArrayList。抛出以下异常:

com.chaquo.python.PyException: TypeError: 'LinkedList' object is not subscriptable

我查看了 Chaquopy-Documentation 并找不到任何有关 Java-List 支持的信息。那里只说明了数组。

现在我的问题是: 在将它们传递给 Python 之前,我是否必须将所有列表转换为 Java 中的数组?

谢谢大家

【问题讨论】:

可能会将任何 LinkedList 对象转换为 ArrayList。只是猜测。 初秋,感谢您的回复。可悲的是,这行不通。也许我说得不够清楚:问题在两种情况下都会出现,链表和数组表。我将在我的问题中添加一个代码示例来澄清它。 【参考方案1】:

你说得对,Chaquopy 支持使用 Python 语法访问 Java 数组,但不支持 Java 列表。您可以:

使用toArray 将列表复制到数组中,并将其传递给Python;或 将列表传递给 Python,让 Python 代码直接调用其方法(即sizeget 等)。

【讨论】:

同时,我自己想通了,但无论如何感谢您的澄清。 也许您可以再回答我一个问题:是否可以在不遍历每个元素的情况下将包含 Python 矩阵的 PyObjects 转换为 Java 中的 Java 列表/数组?这里的最佳做法是什么? 任何可迭代的 Python 对象都可以使用 toJava 转换为兼容的 Java 数组类型。但是如果对象实现了缓冲协议,并且Java数组是匹配类型的,那么转换效率会更高。例如,如果您的对象是 NumPy int16 数组,那么 toJava(short[].class) 将非常快,而 toJava(int[].class) 也可以工作,但要慢得多。

以上是关于Chaquopy:将 Java ArrayList/LinkedList 转换为 Python 数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Studio 中使用 Chaquopy 将值插入到 python 文件中

CHAQUOPY - 将 Python 对象转换为 Kotlin 类

Camerax ImageCapture 传递给 Chaquopy 太慢了

使用 chaquopy 开发的应用程序会在部署时产生问题吗?

使用 chaquopy 的 android studio 不支持 Python 模块

如何在使用 Chaquopy 时在 android 中显示加载动画