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 代码直接调用其方法(即size
、get
等)。
【讨论】:
同时,我自己想通了,但无论如何感谢您的澄清。 也许您可以再回答我一个问题:是否可以在不遍历每个元素的情况下将包含 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 开发的应用程序会在部署时产生问题吗?