wkdxz 发表于 2022-11-26 10:21

请教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)
```
简直是丧心病狂!!

甜萝 发表于 2022-11-26 10:33

这种写法 我没见过 感觉蛮新奇 :lol

sgbyg 发表于 2022-11-26 10:36

真正的多维数组长这样 ---> [['X', 'Y', 'Z'], ['123', 'sgbyg', '52pj']]
[['X', 'Y', 'Z']] 理论上还是一维数组
它的内容只有 ['X', 'Y', 'Z']这一个数组所以赋值后的一维数组 内容只有['X', 'Y', 'Z']

jjl 发表于 2022-11-26 10:38

帮顶学习了

AiPoJie520 发表于 2022-11-26 10:46

感觉就像逆运算,=[['1','2','3']],等号两边同时去掉[],得到a=['1', '2', '3']{:1_904:}

知心 发表于 2022-11-26 10:53

外边的一层中括号抵消了。python的两个变量交换是不需要引入第三个变量的,你理解了这个,你问的你也就理解了

grekevin 发表于 2022-11-26 10:55

就是一种赋值方法,类似于javascript的解构赋值

wkdxz 发表于 2022-11-26 10:58

知心 发表于 2022-11-26 10:53
外边的一层中括号抵消了。python的两个变量交换是不需要引入第三个变量的,你理解了这个,你问的你也就理解 ...

我也这样理解过,但感觉绕不通。解包倒是更像

lizy169 发表于 2022-11-26 11:24

谢谢!学习了

hrpzcf 发表于 2022-11-26 11:27

本帖最后由 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
查看完整版本: 请教python:[a] = a 的原理