
正文
python列表可以嵌套吗,python中列表嵌套列表
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
一个python中嵌套列表的问题,下图中的两种写法,结果不一样,这是为什么?
题主你好,
我说下我的理解, 这个要从内存分配上去看了.
[0]* 3 得到的结果是: [0,0,0], 这里面3个0是被分配的不同内存地址,而
[[0]] * 3,得到的结果是: [[0],[0],[0]],这里面3个[0]在内存中指的其实是一个地址,你可以将后两个[0]理解为第1个[0]的两个别名.
换个说法: [0]* 3 得到的结果[0,0,0]你将里面的3个0理解为: 张三,李四,王五,这是3个人, 你改其中的一个对另两个人是没有影响的. 而
[[0]]*3 得到的结果[[0],[0],[0]]你可以理解为:张三,小张,阿三,其中小张和阿三是张三的两个小名, 这三个[0]其实是1个人, 所以你改变其中一个[0],另外的两个[0]肯定也会跟着变.
而你直接写[[0],[0],[0]],可以理解为这三个[0]是三个不同的人.
至于为什么[[0]]*3得到的是[[0],[0],[0]], 而直接定义[[0],[0],[0]]看着是一样, 但当修改元素值的时候,得到的结果却不同,这就是python的实现机制了,不用太纠结这个,因为python就是这样设计的,你只需要明白这个逻辑,用的时候会用就好.
写在最后: 这只是我自己的理解, 没有理论依据,希望不会误导题主.
希望可以帮到题主, 欢迎追问.
修正后的回答:
使用 "threeZeros=[0] * 3" 这样的语法, 语句执行完,初始状态下, 内存中只会创建一个对象, 然后将3个元素的地址都指向该对象, 即此时内存中只会创建一个对象, 赋值为0, 然后将threeZeros[0], threeZeros[1],threeZeros[2]这三个元素都指向该地址, 即此时id(threeZeros[0])==id(threeZeros[0])==id(threeZeros[0])
当我们对初始化化的threeZeros中的元素单独赋值时, 会在内存中新开辟一块空间创建一个新对象, 因此, 当我们执行完
threeZeros[0] = 3
你会发现, id(threeZeros[0])的地址改变了, 但id(threeZeros[1])和id(threeZeros[2])没变, 因为你只改变了threeZeros[0]元素的指向.
相关问答
Q1: 请教python列表嵌套问题?
可以这样写:
l=[{'name':'张三','性别':'男','年龄':12,'成绩':60},{'name':'张三','性别':'女','年龄':12,'成绩':80},{'name':'李四','性别':'男','年龄':13,'成绩':75},{'name':'王五','性别':'男','年龄':12,'成绩':20}]
l=list(filter(lambda d:d['name']=='张三',l))
print(l)
这是运行截图:
Q2: Python中最常用的操作列表的几种方法归纳
这里介绍几个常用的列表操作:
1、添加元素
添加元素使用列表的内置方法append
number = [1, 2, 3, 4]
number.append(5) # number = [1, 2, 3, 4, 5]
number.append([6,7]) # number = [1, 2, 3, 4, 5, [6, 7]]
number.append({'a':'b'}) # number = [1, 2, 3, 4, [6, 7], {'a', :'b'}
可以看到强大的python列表可以嵌套任意类型
2、列表相加
要想连接两个列表,可以使用+号连接
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b # c = [1, 2, 3, 4, 5, 6]
也可以使用列表内置方法extend连接两个列表
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b) # a = [1, 2, 3, 4, 5, 6]
用+号会创建一个新通对象,使用extend则在原来的对象上面修改
3、列表去重复
列表本身没有去除重复的功能,但是可以借助python的另外一个类型set(help(set)查看)
a = [1, 2, 3, 3,2, 1]
b = list(set(a)) # b = [1, 2, 3]
也可以借助字典类型的内置方法
a = [1, 2, 2, 3, 1, 3]
b = {}.fromkeys(a).keys() # b = [1, 2, 3]
Q3: python列表的嵌套该怎么理解
简单的说就是列表中还有列表,下面举个例子说明
seasons = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
上面就是列表的嵌套,看变量定义就知道是每个季节的月份
Q4: 在 Python 中使用二维数组
在Python中,可以使用列表嵌套的方式来实现二维数组。例如,以下是一个3x3的二维数组的示例代码:
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(arr[0][0])
# 输出1
print(arr[1][2])
# 输出6
在上面的代码中,我们首先创建一个列表arr,其中包含3个子列表。每个子列表都包含3个元素,因此我们可以将arr视为一个3x3的二维数组。要访问二维数组中的元素,我们可以使用两个索引,第一个索引用于选择子列表,第二个索引用于选择子列表中的元素。例如,arr[0][0]表示选择第一个子列表的第一个元素,即1。arr[1][2]表示选择第二个子列表的第三个元素,即6。
Q5: Python怎么拉平嵌套列表
Python如何拉平(flatten)嵌套列表(nested list)
有时候会用到嵌套的列表(list),比如
[1, 2, [3, 4, [5, 6]], ["abc", "def"]]
如果将嵌套的列表拉平(flatten)呢?变成:
[1, 2, 3, 4, 5, 6, "abc", "def"]
方法有很多,目前了解到的各方面都比较好,也很pythonic的方法是:
def flatten(l):
for el in l:
if hasattr(el, "__iter__") and not isinstance(el, basestring):
for sub in flatten(el):
yield sub
else:
yield el
l = [1, 2, [3, 4, [5, 6]], ["abc", "def"]]
l2 = [x for x in flatten(l)]
print l2
#[1, 2, 3, 4, 5, 6, "abc", "def"]
关于python列表可以嵌套吗和python中列表嵌套列表的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







