是BB啊 发表于 2021-6-4 18:07:12

二维数组问题

大佬们,请问怎样才能在改数值的时候不影响其他列表?
>>> lst1
[, ]
>>> lst2
[, ]
>>> lst3
[, ]
>>> lst4
[, ]
>>> lst2 = 8
>>> lst1
[, ]
>>> lst2
[, ]
>>> lst3
[, ]
>>> lst4
[, ]
>>>

逃兵 发表于 2021-6-4 18:20:11

lst1 = [, ]
for i in range(2,5):
    exec(f'lst'+str(i)+' = for i in lst1]')


>>> lst2 = 8
>>> lst1
[, ]
>>> lst2
[, ]
>>> lst3
[, ]
>>> lst4
[, ]

Twilight6 发表于 2021-6-4 19:11:16


内嵌列表的 ID 相同,导致你更改一个内嵌列表元素使得所有指向此 ID 的变量都同时进行改变

dragon_xiao 发表于 2021-6-5 10:09:54

>>> lst1
[, ]

>>>lst1 = 'a'
[['a',2,3],]

是BB啊 发表于 2021-6-5 16:07:36

Twilight6 发表于 2021-6-4 19:11
内嵌列表的 ID 相同,导致你更改一个内嵌列表元素使得所有指向此 ID 的变量都同时进行改变

对呀我知道,要怎样才能避免这种情况呢

Twilight6 发表于 2021-6-5 16:09:08

是BB啊 发表于 2021-6-5 16:07
对呀我知道,要怎样才能避免这种情况呢



像二楼这种方法就可以达到目的

是BB啊 发表于 2021-6-5 16:09:31

逃兵 发表于 2021-6-4 18:20


for后面那一段看不懂{:5_107:}

Twilight6 发表于 2021-6-5 16:16:26

本帖最后由 Twilight6 于 2021-6-5 16:17 编辑

是BB啊 发表于 2021-6-5 16:09
for后面那一段看不懂


exec 函数那可以直接这样写,可以不用加列表推导式:

lst1 = [, ]
for i in range(2,5):
    exec(f'lst{i} = '+str(lst1))

lst1 = 8
print(lst1,'\n',lst2,'\n',lst3,'\n',lst4)

exec 函数可以读取在字符串中的代码语句,符合 Python 语法要求即可

这里 for 循环中进行字符串拼接 相当通过 exec 函数于执行这三个字符串:

'lst2 = [, ]'
'lst3 = [, ]'
'lst4 = [, ]'



是BB啊 发表于 2021-6-5 16:18:23

Twilight6 发表于 2021-6-5 16:16
exec 函数那可以直接这样写,可以不用加列表推导式:




谢谢你,以后用着这种方法

Twilight6 发表于 2021-6-5 16:20:02

是BB啊 发表于 2021-6-5 16:18
谢谢你,以后用着这种方法



没事,你去了解 exec 同时可以去了解下 eval

这两个函数都能执行字符串中的代码

是BB啊 发表于 2021-6-5 16:21:43

Twilight6 发表于 2021-6-5 16:20
没事,你去了解 exec 同时可以去了解下 eval

这两个函数都能执行字符串中的代码

嗯嗯,我在看了
页: [1]
查看完整版本: 二维数组问题