Python内置数据结构 - 列表list

列表具有的特性/功能

- 有顺序的元素的集合
- 操作
	- 简单创建
	- 通过其它列表创建
	- 访问
	- 分片
	- 追加 :在末尾追加(append),在指定位置追加 (insert)
	- 删除 :  
		- del
		- remove
		- pop
	- 清除: clear
	- 反转
	- 扩展
	- 拷贝
	- 内嵌函数操作列表
		- len:返回列表长度
		- del :删除一个列表
		- max/min:返回列表里面最大/小值

列表list的功能演示

  • 简单创建
#创建空列表
l1 = []

#创建带值的列表
l2 = [100]

#创建多个值的列表
l3 = [1,2,3,45,56,4,43]

#使用list()创建
l4 = list()

#使用for循环创建新列表
  • 通过其它列表创建
#for 创建
a = ['a', 'b', 'c']

#用list a 创建一个list b
#对于所有a中的元素,逐个放入新列表b中,生成新的id
b = [i for i in a]     #这里等同于b = a
print(id(a))
print(id(b))
print(b)

#对于所有a中的元素,逐个乘以10放入新列表b中
a = [1, 2, 3]
b = [i*10 for i in a]     
print(b)

#还可以过滤原来list中的内容并放入新列表
#比如原有列表a, 需要把所有a中偶数生成新列表b
a = [x for x in range(1,35)]   #生成从1 到34 的列表
print(a)

#带条件表达式的列表生成式
b = [m for m in a if m % 2 == 0]
print(b)

#列表生成可以嵌套
#以俩个列表a,b为例

a = [i for i in range(1,4)]  #生成 list a
print(a)
b = [i for i in range(100,400) if i% 100 ==0]
print(b)

#列表嵌套,等于两个for循环的嵌套
c = [m+n for m in a for n in b]
print(c)

#列表嵌套,等于两个for循环的嵌套,加上过滤条件
c = [m+n for m in a for n in b if m+n <= 300]
print(c)
  • 访问
    • 使用下标操作(索引)
    • 列表的位置是从0开始
    • 列表访问不能越界,会报错
 #下标访问列表
l = [2,3,5,12,51,6]

#打印列表第一个值,注意索引是0
print(l[0])

print("*" * 20)
#使用for循环打印所有的值
for i in l:
    print(i)
  • 分片
    • 在整个队列里面截取任意一小段
    • 用冒号分隔: l[a?️c], 其中c是步长,可以省略,省略默认为1
    • 分片操作默认生成一个新的list,可以用内置函数id来看是否同一个list
    • 分片下标可以超出范围,超出后不考虑多余下标内容, 注意跟范围下标超出时报错的区别
#分片操作
l = [2,3,5,12,51,6,11,12,13]

#截取第一个到第三个
print(l[0:3])

#下标可以不写,如果不写,左边默认为0, 右边下标值为最大数加1,既表示到最后一个数据
print(l[:4])
print(l[2:])

#增加步长
print(l[1:6:1])
#跳一个
print(l[1:6:2])

#下标可以超出范围,超出后不考虑多余下标内容
print(l[1:30])

#从后面开始
#从右往左,最后一个数是-1,这里-4表明右边数到左边第四个,注意-2 值是12, 但是没有包含
print(l[-4:-2])

#一般下标是从左边到右边,如果一定要从右边往左,步长要是负数。显示结果是倒装的
print(l[-2:-4:-1])
  • 追加 :在末尾追加(append),在指定位置追加 (insert)
#在末尾追加内容
a = [i for i in range(1,5)]
print(a)
a.append(100)
print(a)

#insert: 指定位置插入
#insert(index, data), 插入位置是index前面
a.insert(3,666)  #在4的前面插入一个数666
print(a)
  • 删除 :
    • del: 删除整个list, list将无法访问
    • pop: 从一个列表中拿出/弹出一个元素,既把最后一个元素取出来。原列表中就没有了。
    • remove: 在列表中删除指定的值的元素,不返回删除的值,注意跟pop的区别
#在末尾追加内容
a = [i for i in range(1,5)]
print(a)
a.append(100)
print(a)

#insert: 指定位置插入
#insert(index, data), 插入位置是index前面
a.insert(3,666)  #在4的前面插入一个数666
print(a)

#删除
#del删除  删除整个list
#pop 从一个列表中拿出/弹出一个元素,既把最后一个元素取出来。原列表中就没有了。
last_item = a.pop()
print(last_item)
print(a)
'''
remove:在列表中删除指定的值的元素,不返回删除的值,注意跟pop的区别
#如果被删除的值没有在list中,则报错
#既,删除的值的操作应该使用try...except语句,或者先行进行判断
if x in list:
    list.remove(x)
'''
if 666 in a:
    item = a.remove(666)   #删除a中值为666的元素,返回None
print(item)
print(a)
  • 清除: clear
    • 把列表数据都清除,但是list保存,注意和del的区别
#clear:清空,把列表数据都清除,但是list保存,注意和del的区别
a = [i for i in range(1,5)]
print(a)
a.clear()
print(a)

#如果不需要列表地址保持不变,可以用如下方式,相当于保持旧的list对象,但是指向新的列表
print(id(a))
a = list()
print(id(a))
a = []
print(id(a))
  • 反转 reverse
    • 反转列表内容,原地反转, 指向原先id- 反转列表内容,原地反转, 指向原先id
#reverse:反转列表内容,原地反转
a = [i for i in range(1,5)]
print('原先列表的值:{0}'.format(a))
print('原先列表的id:{0}'.format(id(a)))
a.reverse()

print('反转列表的值:{0}'.format(a))
print('反转列表的id:{0}'.format(id(a)))
  • 扩展 extend
    • 扩展列表,俩个列表,把一个直接拼接到另外一个上
    • 在原先的list的基础上进行扩展,id不变
#使用extend进行扩展示例
a = [i for i in range(1,6)]
b = [i for i in range(5,10)]
print(id(a))
a.extend(b)
print(id(a))
print(a)

-拷贝 (浅拷贝) copy

#列表类型变量赋值
#修改了b, 把a的列表也改变了,这里 b = a 是把a的地址传给了b
a = [1,2,3,4]
print(a)
b = a
b[3] = 777
print(b)
print(a)

# copy传了值,用copy重新生成了一个列表,所以对新的列表的修改不会影响原先的列表,仅限于第一层
print("*" * 20)
c = a.copy()
c[3] = 113
print(a)
print(c)
  • 内嵌函数操作列表
#len: 求列表长度
a = [x for x in range(1,100)]
print(len(a))
#max/min: 求列表中的最大值/最小值
a = [1,3,6,4,8,5,9,8]
print(max(a))
print(min(a))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章