gpt4 book ai didi

python - MATLAB 相当于 Python 中的字典列表吗?

转载 作者:行者123 更新时间:2023-12-01 04:06:50 31 4
gpt4 key购买 nike

在Python中:

my_list = []
my_dict_a = {1: 'one'}
my_dict_b = {2: 'two'}
my_dict_c = {3: 'three'}
my_list.append(my_dict_a)
my_list.append(my_dict_b)
my_list.append(my_dict_c)

哪里my_list现在等于[{1: 'one'}, {2: 'two'}, {3: 'three'}] .

如果我们可以说containers.Map 基本相当于Python 字典,那么相当于上述Python 追加的MATLAB 是什么?

我在 MATLAB 中尝试过的内容:

知道:

>a=[];
>b=1;
>a = [a, b]

a = 1

>a = [a, b]

a = 1 1

>a = [a, b]

a = 1 1 1

>a={};
>b=1;
>a=[a,b]

a = [1]

>a=[a,b]

a = [1] [1]

>a=[a,b]

a = [1] [1] [1]

>a = [a; b]

a = 1

>a = [a; b]

a = 1
1

>a = [a; b]

a =
1
1
1

然而当我尝试对 containers.Map 做同样的事情时对象:

>dictA=containers.Map();
>dictA('first')=1;
>dictA('second')=2;
>dictA('third')=3;

>a=[];
>a = [a, dictA]

a =

Map with properties:

Count: 3
KeyType: char
ValueType: any

>a = [a, dictA]
Error using containers.Map/horzcat
Horizontal concatenation is not supported by a containers.Map.

好的。但是呢:

>a=[];
>a = [a; dictA]

a =

Map with properties:

Count: 3
KeyType: char
ValueType: any

>a = [a; dictA]

a =

Map with properties:

Count: 3
KeyType: char
ValueType: any

>whos a
Name Size Bytes Class Attributes

a 3x1 112 containers.Map

但它并没有继续追加:

>a={};
>a = [a; dictA]

a =

Map with properties:

Count: 3
KeyType: char
ValueType: any

>a = [a; dictA]

a =

Map with properties:

Count: 3
KeyType: char
ValueType: any

>whos a
Name Size Bytes Class Attributes

a 3x1 112 containers.Map

但是

>{dictA}

ans =

[3x1 containers.Map]


>a = {};
>a = [{a}; {dictA}]

a =

{}
[3x1 containers.Map]

>a = [{a}; {dictA}]

a =

{2x1 cell }
[3x1 containers.Map]

>whos a
Name Size Bytes Class Attributes

a 2x1 672 cell

>a = [{a}; {dictA}]

a =

{2x1 cell }
[3x1 containers.Map]

>whos a
Name Size Bytes Class Attributes

a 2x1 1008 cell

>a = {};
>a = {a dictA}

a =

{} [3x1 containers.Map]

>whos a
Name Size Bytes Class Attributes

a 1x2 336 cell

a = {a dictA}

a =

{1x2 cell} [3x1 containers.Map]

>whos a
Name Size Bytes Class Attributes

a 1x2 672 cell

最后

>a = {};
>a = {[a] [dictA]}

a =

{} [3x1 containers.Map]

>a = {[a] [dictA]}

a =

{1x2 cell} [3x1 containers.Map]

>a = {[a] [dictA]}

a =

{1x2 cell} [3x1 containers.Map]

最佳答案

containers.Map类不支持与数值数组相同类型的数组串联(部分原因是 Map 类重载了某些数组访问函数)。所以你不能创建一个 Map 的数组对象(尽管在尝试垂直串联时没有错误消息)。

containers.Map 的元胞数组对象

但是,您可以创建一个元胞数组 Map物体;你只需要注意语法。你已经非常接近了,但我认为这就是你想要的:

>> a = {};
>> a = [a, {dictA}]
a =
[3x1 containers.Map]

>> a = [a, {dictA}]
a =
[3x1 containers.Map] [3x1 containers.Map]

>> a = [a, {dictA}]
a =
[3x1 containers.Map] [3x1 containers.Map] [3x1 containers.Map]

>> a{1}('first')
ans =
1

我们可以使用分号来垂直连接它们 a = [a; {dictA}]

元胞数组,{} ,和[]

我对此的看法是 {}用于将东西放入单元格中(也可以将它们取出),而 []是也适用于元胞数组的串联操作。

a = {}分配a成为一个空元胞数组。

a = [a, {dictA}]看跌dictA到一个单元格中,然后将此 1x1 单元格数组与单元格数组 a 连接起来.

a = [{a}, {dictA}]会放 a在另一个元胞数组中,导致您遇到奇怪的嵌套元胞数组。

a{1}返回元胞数组 a 中第一个元胞的内容,在本例中是 Map对象。

在我看来,元胞数组和各种方括号/圆括号的使用是学习 MATLAB 时最令人困惑的事情之一。

小心!这些是浅拷贝

请注意,MATLAB 称之为“句柄类”,这意味着 a{1} , a{2} ,和dictA都是指向同一对象的指针/引用。因此:

>> a{1}('fourth') = 4;
>> a
a =
[4x1 containers.Map] [4x1 containers.Map] [4x1 containers.Map]

请注意,所有这 3 个尺寸都增加了。只是想警告您,以防这与 Python 中的行为不同(我不知道 Python 中的行为是什么)。

关于python - MATLAB 相当于 Python 中的字典列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35443164/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com