Python:数据类型list的基本操作,list嵌套数组简述

转自:北京图灵学院刘大拿
https://study.163.com/course/introduction.htm?courseId=1004987028

后续补充来源:Python-廖雪峰
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014316724772904521142196b74a3f8abf93d8e97c6ee6000

python中有四种数据结构

  • 列表:list = [1,2,3, 4,’one’,‘two’]
  • 字典:dict = {‘a’:123,’b’:’something’}
  • 集合:set = {‘apple’,’pear’,’apple’}
  • 元组: tuple =(123,456,’hello‘)

这里总结一下list的一些基本操作,首先是关于列表的创建。

# 1. 创建空列表
l1 = []
# type是内置函数,负责打印出变量的类型
print(type(l1))
print(l1)

# 2. 创建带值的列表
l2 = [100]
print(type(l2))
print(l2)

# 3. 创建列表,带多个值
l3 = [2,3,1,4,6,4,6]
print(type(l3))
print(l3)

# 4. 使用list()
l4 = list()
print(type(l4))
print(l4)

<class 'list'>
[]
<class 'list'>
[100]
<class 'list'>
[2, 3, 1, 4, 6, 4, 6]
<class 'list'>
[]

列表常用操作

  • 访问
    • 使用下标操作(索引)
    • 列表的位置是从0开始
  • 分片操作
    • 对列表进行任意一段的截取
    • list[x:x]
下标访问列表示例
#列表中元素的顺序从左到右,从0开始计数
l = [3,2,1,4,6,3,2]
print(l[3])#输入数字位置直接打印出该数字
print(l[0])

4
3
分片操作示例

对列表进行分片时,它所定义的范围为[x:x),其包含左边的下标值,不包含右边的下标值,属于半开半闭区间

l = [3,2,1,4,6,3,2]
# 注意分片所截取的范围
print(l[1:4])
# 下标值可以为空,如果不写,左边下标值默认为0, 右边下标值为最大数加1,即表示截取到最后一个数据
print(l[:])#打印列表所有元素
print(l[:4])#打印第5号位置前所有元素(不包含第5号元素)
print(l[2:])#打印第3号位置后所有元素(包含第3号元素)

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

对列表进行分片操作时,它选定元素的增长幅度是可以定义的,其格式为list(左区间:右区间:增长幅度)

l=[1,2,3,4,5,6,7,8]
# 分片可以控制增长幅度,默认增长幅度为1
print(l[1:6:1])

[2, 3, 4, 5, 6]

# 打印从下标1开始的数字,每次隔一个
print(l[1:6:2])

[2, 4, 6]

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

[3, 4, 5, 6, 7, 8]

# 下标值,增长幅度可以为负数
# 为负数,表明顺序是从右往左,并且起始值是-1
# 规定: 数组最后一个数字的下标是-1

分片之负数下标

对列表进行切片操作时,其增长幅度可以为负数,当为负数时,列表中所有元素的位置计算顺序为从右往左,并且起始位置值为-1

l=(1,2,3,4,5,6,7,8,9)
print(l)
#下面打印显示的为空,因为默认分片总是从左向右截取。
print(l[-2:-4])
print(l[-4:-2])#正常情况,分片左边的值一定小于右边的值

# 如果分片时一定要左边值比右边大,则步长参数需要使用负数
# 此案例为一个list直接正反颠倒提供了一种思路
print(l[-2:-4:-1])
print(l[-3:-5:-1])

(1, 2, 3, 4, 5, 6, 7, 8, 9)
()
(6, 7)
(8, 7)
(7, 6)

分片操作是生成一个新的list

内置函数id(),其功能为显示一个变量或者数据的唯一确定编号

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

c = a
print(id(c))

# 如果a跟c只想一份数据,则更改a的值同样也会更改c的值
# 但是,显示结果并非如此,为什么?
a = 101
print(a)
print(c)

93941189949760
93941189952960
93941189949760
101
100
# 通过id可以直接判断出分片是从新生成了一份数据还是使用的同一份数据
l = [3,4,56,76,32,21,43,5]
ll = l[:]
lll = ll
# 如果两个id值一样,则表明分片产生的列表是使用的同一地址同一份数据
# 否则,则表明分片是从新生成了一份数据,即一个新的列表,然后把数值拷贝到新列表中
print(id(l))
print(id(ll))
print(id(lll))

# 通过id知道,ll和lll是同一份数据,验证代码如下
l[1] = 100
print(l)
print(ll)

ll[1] = 100
print(ll)
print(lll)


140226763582408
140226318124808
140226318124808
[3, 100, 56, 76, 32, 21, 43, 5]
[3, 4, 56, 76, 32, 21, 43, 5]
[3, 100, 56, 76, 32, 21, 43, 5]
[3, 100, 56, 76, 32, 21, 43, 5]

list里面的元素的数据类型也可以不同,比如:

 L = ['Apple', 123, True]

list里可以包含另外的list,比如:

s = ['python', 'java', ['asp', 'php'], 'scheme']
len(s)

4

要注意list:s中只有4个元素,其中s[2]又是一个list,如果拆开写就更容易理解了:

p = ['asp', 'php']
s = ['python', 'java', p, 'scheme']

如果想要拿到 php 可以写p[1]或者s[2][1],因此 s 可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。

如果一个list中一个元素也没有,就是一个空的list,它的长度为0:

L = []
len(L)

0

你可能感兴趣的:(python,列表list)