Python自学-内置数据结构(列表list)

内置数据结构(变量类型)

  • list 列表
  • set 集合
  • dict 字典
  • tuple 元组

list 列表

  • 一组有顺序的数据的组合
  • 创建列表
# 1.创建空列表
l1 = []
# type 是内置函数,负责打印出变量的类型
print(type(l1))
print(l1)
# 2.创建带值的列表
l2 = [100]
print(type(l2))
print(l2)
# 3.创建列表,带多个值
l3 = [1,3,4,5,6]
print(type(l3))
print(l3)
# 4.使用 list()
l4 = list()
print(type(l4))
print(l4)
<class 'list'>
[]
<class 'list'>
[100]
<class 'list'>
[1, 3, 4, 5, 6]
<class 'list'>
[]

列表操作

  • 访问
    • 使用下标操作(索引)
    • 列表的位置是从 0 开始
  • 分片操作
    • 对列表进行任意一段的截取
    • l[m:n:s] m:左下标,n:右下标,s:步长
    • 分片操作是生成一个新的列表
# 下标访问列表
l = [3,1,4,2,8,9,6]
# 访问列表 l 列表中下标为 0 的元素
print(l[0],"\n")
# 遍历并打印 l 列表的每个元素
for i in range(0,len(l)):
    print("列表的第{0}个元素为:{1}".format(i+1,l[i]))

print("\n")
# 分片操作 [n:m]
# 注意截取的范围,包含左边的下标值 n,不包含右边的下标值 m
print(l[1:3])

print("\n")
# 下标值可以为空,左边为空则下标默认为 0,右边为空则默认为列表长度加 1,即截取至最后
print(l[:])
print(l[2:])
print(l[:3])

print("\n")
# 分片可以控制增长幅度(即步长),默认增长幅度为1
print(l[2:6])
print(l[2:6:1])
print(l[2:6:2])

print("\n")
# 下标可以超出范围,超出后不在考虑多余下标的内容
print(l[2:1000])
print(l[-100:2])

print("\n")
# 下标值的增长幅度可为负数,即顺序是从右往左
# 规定:列表最后一个元素的下标是 -1
# 正常情况下,分片左下标小于右下标的值
# 当分片左下标必须大于右小标的值时,步长为负数即可,此时注意截取为倒序
print(l)
print(l[-2:-4])    # 结果为空,因为分片默认从左向右截取
print(l[-4:-2])
print(l[-2:-4:-1])
# 将原列表元素顺序颠倒:
print(l[::-1])

print("\n")
# 分片操作是生成一个新的列表
# 内置函数 id,负责显示一个变量或者数据的唯一确定编号

# id 函数案例
a = 100
b = 200
print(id(a))
print(id(b))

c = a
print(id(c))    # a 与 c 的 id 值一致

a = 111
print(a,id(a))    # 重新赋新值给 a,即 a 这个标签贴在新值上,id(a)被更改
print(c,id(c))

print("\n")
# 通过 id 可以直接判断出分片是否新生成一个列表
ll = l[:]
lll = ll
print(id(l))
print(id(ll))
print(id(lll))

print("\n")
# 通过以上 id 可知,ll 和 lll 是同一个列表,验证如下:
l[1] = 1000
print(l)
print(ll)
print(lll)
ll[1] = 2000
print(ll)
print(lll)
3 

列表的第1个元素为:3
列表的第2个元素为:1
列表的第3个元素为:4
列表的第4个元素为:2
列表的第5个元素为:8
列表的第6个元素为:9
列表的第7个元素为:6


[1, 4]


[3, 1, 4, 2, 8, 9, 6]
[4, 2, 8, 9, 6]
[3, 1, 4]


[4, 2, 8, 9]
[4, 2, 8, 9]
[4, 8]


[4, 2, 8, 9, 6]
[3, 1]


[3, 1, 4, 2, 8, 9, 6]
[]
[2, 8]
[9, 8]
[6, 9, 8, 2, 4, 1, 3]


1784248432
1784251632
1784248432
111 1784248784
100 1784248432


82080904
82074696
82074696


[3, 1000, 4, 2, 8, 9, 6]
[3, 1, 4, 2, 8, 9, 6]
[3, 1, 4, 2, 8, 9, 6]
[3, 2000, 4, 2, 8, 9, 6]
[3, 2000, 4, 2, 8, 9, 6]
# 关于列表的函数

# 列表可以装任何东西
l = ['a','I like Python',12,5+4j]
print(l)

# append 插入一个元素,在末尾追加
a = [i for i in range(1,5)]
print(a)
a.append(100)
print(a,"\n")

# insert(index,data) 指定位置插入元素
print(a)
a.insert(3,666)
print(a,"\n")

# index 查找里元素所在位置
print(a.index(3),"\n")

# count 统计元素在列表中出现的次数
a.append(3)
print(a.count(3),"\n")

# sort 按照 ascii 码排序
a.sort()
print(a,"\n")

# extend 拼接两个列表
b = ["拼接的列表元素"]
a.extend(b)
print(a,"\n")

# pop 删除最后一个元素
print(a)
last_pop = a.pop()
print(last_pop)
print(a,"\n")

# del 删除
del a[0]

# remove 删除指定的元素
# 如果被删除的元素不在列表中,则报错
# 如果不希望报错,在使用 remove 时应借助 try...excepty,或者先行判断:
# if x in list:
#     list.remove(x)
print(a)
print(id(a))
a.remove(4)
print(a)
print(id(a),"\n")
# 输出两个 id 值一致,说明 remove 操作是在 原列表上直接操作

# clear 清空
print(a)
print(id(a))
a.clear()
print(a)
print(id(a),"\n")

# 如果不需要列表地址保持不变,则清空列表可使用以下方式
print(a)
print(id(a))
a = list()    # 或者 a = []
print(a)
print(id(a),"\n")

# reverse 原地翻转列表内容,翻转前后 id 一致
a = [1,3,45,5]
print(a)
print(id(a))
a.reverse()
print(a)
print(id(a),"\n")
['a', 'I like Python', 12, (5+4j)]
[1, 2, 3, 4]
[1, 2, 3, 4, 100] 

[1, 2, 3, 4, 100]
[1, 2, 3, 666, 4, 100] 

2 

2 

[1, 2, 3, 3, 4, 100, 666] 

[1, 2, 3, 3, 4, 100, 666, '拼接的列表元素'] 

[1, 2, 3, 3, 4, 100, 666, '拼接的列表元素']
拼接的列表元素
[1, 2, 3, 3, 4, 100, 666] 

[2, 3, 3, 4, 100, 666]
76168072
[2, 3, 3, 100, 666]
76168072 

[2, 3, 3, 100, 666]
76168072
[]
76168072 

[]
76168072
[]
76100232 

[1, 3, 45, 5]
76100808
[5, 45, 3, 1]
76100808 
# 赋值 = 与 copy 浅拷贝

# 列表类型变量赋值示例
a = [1,2,3,4,5,6]
print(a)
# list 类型,简单赋值操作,是传地址,a 和 b 的 id 一致
b = a
b[1] = 777
print(a)
print(id(a))
print(b)
print(id(b))

print("-"*40)

# copy 浅拷贝相当于新建一个列表,id 不一致
c = a.copy()
print(a)
print(id(a))
print(c)
print(id(c))

print("-"*40)

c[1] = 888
print(a)
print(c)
[1, 2, 3, 4, 5, 6]
[1, 777, 3, 4, 5, 6]
78889928
[1, 777, 3, 4, 5, 6]
78889928
----------------------------------------
[1, 777, 3, 4, 5, 6]
78889928
[1, 777, 3, 4, 5, 6]
78947272
----------------------------------------
[1, 777, 3, 4, 5, 6]
[1, 888, 3, 4, 5, 6]
# 深拷贝和浅拷贝的区别
# copy 浅拷贝只拷贝一层内容,嵌套的列表依然为传地址操作
a = [1,2,3,[10,20,30]]
b = a.copy()
print(id(a[3]))
print(id(b[3]))

a[2] = 333
a[3][2] = 777

print(a)
print(b)
78946568
78946568
[1, 2, 333, [10, 20, 777]]
[1, 2, 3, [10, 20, 777]]
78947080
78843400
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值