请教python:[a] = a 的原理
本帖最后由 wkdxz 于 2022-11-26 10:27 编辑今天逛其他论坛,遇到这样的用法,之前一直没用过,看起来似懂非懂。
请懂的兄弟帮看下,是什么操作(个人感觉像是解包,但又没听谁讲过类似方法)
### A代码
```
a = [['X', 'Y', 'Z']]
= a
print(a)
```
### A输出
```
['X', 'Y', 'Z']
```
### 以上是我见到的写法
### 而我常用的写法是下面这样
```
def allToList(ls):
bigList = []
for i in ls:
if isinstance(i, (list, tuple)):
bigList.extend(i)
else:
bigList.append(i)
return bigList
a = [['X', 'Y', 'Z'], , 4, 5, (9, 1)]
print(allToList(a))
```
### 输出
```
['X', 'Y', 'Z', 1, 2, 3, 4, 5, 9, 1]
```
---
### 结语:
>虽然`A代码`的写法只能处理一个列表,但确实很简洁啊,哪位兄弟知道原理,给讲解下呗
>**刚又试了,甚至可以这样写:**
```
a = [[['X', 'Y', 'Z']]]
[] = a
print(a)
```
简直是丧心病狂!! 这种写法 我没见过 感觉蛮新奇 :lol 真正的多维数组长这样 ---> [['X', 'Y', 'Z'], ['123', 'sgbyg', '52pj']]
[['X', 'Y', 'Z']] 理论上还是一维数组
它的内容只有 ['X', 'Y', 'Z']这一个数组所以赋值后的一维数组 内容只有['X', 'Y', 'Z'] 帮顶学习了 感觉就像逆运算,=[['1','2','3']],等号两边同时去掉[],得到a=['1', '2', '3']{:1_904:} 外边的一层中括号抵消了。python的两个变量交换是不需要引入第三个变量的,你理解了这个,你问的你也就理解了 就是一种赋值方法,类似于javascript的解构赋值 知心 发表于 2022-11-26 10:53
外边的一层中括号抵消了。python的两个变量交换是不需要引入第三个变量的,你理解了这个,你问的你也就理解 ...
我也这样理解过,但感觉绕不通。解包倒是更像 谢谢!学习了 本帖最后由 hrpzcf 于 2022-11-26 11:28 编辑
>>> import dis
>>> code = """a = [['X', 'Y', 'Z']]
= a
"""
>>> dis.dis(code)
1 0 LOAD_CONST 0 ('X')
2 LOAD_CONST 1 ('Y')
4 LOAD_CONST 2 ('Z')
6 BUILD_LIST 3
8 BUILD_LIST 1
10 STORE_NAME 0 (a)
2 12 LOAD_NAME 0 (a)
14 UNPACK_SEQUENCE 1
16 STORE_NAME 0 (a)
18 LOAD_CONST 3 (None)
20 RETURN_VALUE
>>>
虽然看不太懂 Python 指令,但看到 UNPACK_SEQUENCE 名称明显是一条“解包序列”的指令
页:
[1]
2