Python列表知识点(2):解析式创建list对象

在创建一个list 时,除在[]中直接给出所有列表元素外,还可以通过一个for 循环语句生成列表的所有元素。这种创建list 的方式称为列表解析式(list comprehension)。
例如:
pow2 = [2 ** x for x in range(10)]
# 输出: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
print(pow2)
输出:
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
注意,“[2 ** x for x in range(10)]”等价于:
pow2 = []
for x in range(10):
     pow2.append(2 ** x)
print(pow2)
输出:
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

list包含的不是对象本身而是对象的引用
list 中的元素不是对象本身而是对象的引用。无论每个对象本身占据多大内存,这个引用总是占用固定大小的内存。例如:
import sys
alist = []
print(sys.getsizeof(alist) ,end = ' ') #输出64
alist = [2]
print(sys.getsizeof(alist) ,end = ' ') #输出72
alist = [2,3.14]
print(sys.getsizeof(alist) ,end = ' ') #输出80
alist = [2,3.14,'hello']
print(sys.getsizeof(alist) ,end = ' ') #输出88
alist = [2,3.14,'hello',[5,6,'world']]
print(sys.getsizeof(alist) ,end = ' ') #输出96
输出:
64 72 80 88 96
空的list 占用64 字节的内存,每添加一个元素,就多占用8 字节,这8 字节就是实际对象的引用所消耗的内存。如图所示,alist 的内存布局示意图。

 

 

创建list 列表对象有三种方法:

方括号[]指明所有元素、内置函数list()、列表解析式将可迭代对象转为一个list,生成所有元素。
list 是有序序列,每个元素都对应唯一的下标,可以通过下标运算符[]进行索引或切片操作也可以用for 循环迭代访问其中的元素。
list 中的每个元素都是实际对象的引用,而不是实际对象本身。
既可以用内置函数对list 进行操作,也可以用list 的方法对list 进行操作。

 

posted @ 2021-02-03 21:21  konqlan  阅读(895)  评论(0)    收藏  举报