Main Content

在 MATLAB 中使用 Python list 变量

此示例说明如何在 MATLAB® 中使用 Python® list 变量。

要调用接受 list 输入参量的 Python 函数,请创建一个 py.list 变量。要将列表转换为 MATLAB 变量,请调用 cell 函数,然后为列表中的每个元素调用适当的转换函数。

调用接受 list 输入参量的 Python 函数

Python len 函数返回容器中的项目数,其中包括一个 list 对象。

py.help('len')
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

调用 os.listdir 以创建一个名为 P 的由程序组成的 Python list

P = py.os.listdir("C:\Program Files\MATLAB");
class(P)
ans = 
'py.list'

显示程序的数量。

py.len(P)
ans = 
  Python int with properties:

    denominator: [1×1 py.int]
           imag: [1×1 py.int]
      numerator: [1×1 py.int]
           real: [1×1 py.int]

    9

显示一个元素。

P{2}
ans = 
  Python str with no properties.

    R2016b

对 Python 列表进行索引

使用 MATLAB 索引显示列表中的元素。例如,显示 list 中的最后一个元素。MATLAB 返回一个 Python list

P(end)
ans = 
  Python list with no properties.

    ['R2021a']

您也可以在 for 循环中循环访问该列表。

for n = P
    disp(n{1})
end
  Python str with no properties.

    R2014b

  Python str with no properties.

    R2016b

  Python str with no properties.

    R2017b

  Python str with no properties.

    R2018b

  Python str with no properties.

    R2019a

  Python str with no properties.

    R2019b

  Python str with no properties.

    R2020a

  Python str with no properties.

    R2020b

  Python str with no properties.

    R2021a

将 Python list 类型转换为 MATLAB 类型

以下代码使用 MATLAB 变量显示 list P 中的名称。调用 cell 以转换该列表。该列表由 Python 字符串组成,因此调用 char 函数来转换元胞数组的元素。

cP = cell(P);

每个元胞元素名称均为一个 Python 字符串。

class(cP{1})
ans = 
'py.str'

将 Python 字符串转换为 MATLAB 数据。

mlP = string(cell(P));

显示名称。

for n = 1:numel(cP)
    disp(mlP{n})
end
R2014b
R2016b
R2017b
R2018b
R2019a
R2019b
R2020a
R2020b
R2021a

在 MATLAB 中使用 Python 数值类型列表

Python list 包含任何类型的元素,并且可以包含混合类型的元素。以下代码中使用的 MATLAB double 函数假设 Python list 的所有元素均为数值。

假设您有一个 Python 函数,它返回名为 P 的由整数组成的 list。要运行此代码,请用以下值创建该变量。

P = py.list({int32(1), int32(2), int32(3), int32(4)})
P = 
  Python list with no properties.

    [1, 2, 3, 4]

显示值的数值类型。

class(P{1})
ans = 
'py.int'

P 转换为 MATLAB 元胞数组。

cP = cell(P);

将元胞数组转换为 double 类型的 MATLAB 数组。

A = cellfun(@double,cP)
A = 1×4

     1     2     3     4

读取嵌套 list 类型的元素

以下代码访问包含 list 元素的 Python list 变量的元素。假设您有此 list

matrix = py.list({{1, 2, 3, 4},{'hello','world'},{9, 10}});

显示元素 'world',它位于索引 (2,2) 处。

disp(char(matrix{2}{2}))
world

显示 Python 元素的步进范围

如果您使用切片来访问 Python 对象的元素,Python 中的格式是 start:stop:step。在 MATLAB 中,语法形式为 start:step:stop

li = py.list({'a','bc',1,2,'def'});
li(1:2:end)
ans = 
  Python list with no properties.

    ['a', 1.0, 'def']