python-9 数据结构

列表创建

推导式:
专门用来生成满足特定需求的列表

语法格式 :
表达式  for 变量 in 序列

>>> list = [x*x for x in range(1,10)]
>>> list
[1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> list
[1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> list1 = [i for i in list]
>>> list1
[1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> list3 = [i for i in list if i%2==0]
>>> list3
[4, 16, 36, 64]

列表的操作

包括:索引访问,切片操作,连接操作,重复操作,成员关系操作
比较运算操作 长度 ,最大值,最小值 ,求和

索引访问:
数组的下标可以是负整数

>>> list1 = [1,2,3,4]
>>> list[0]
1
>>> list1[-1]
4

列表的下标只能是整数

修改元素的值:
>>> list1[0]=10
>>> list1
[10, 2, 3, 4]

删除列表中的元素

del 列表元素
>>> list1
[1, 2, 3, 4]
>>> del list1[1]
>>> list1
[1, 3, 4]

求列表的长度,最大值,最小值,求和

len
max
min
sum

>>> list1
[1, 3, 4]
>>> list1
[1, 3, 4]
>>> len(list1)
3
>>> max(list1)
4
>>> sum(list1)
8

类型不一致时
>>> list3 = [1,2,'a',4,5]
>>> list3
[1, 2, 'a', 4, 5]
>>> len(list3)
5
>>> sum(list3)
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    sum(list3)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
都是字母可以使用min max,但是只有数值才能求和

切片

截取列表的一部分

两种写法
1.
s[i:j]
i包含 j不包含
2.
s[i:j:k]
i包含 j不包含,k是步长

可以省略i j k,不可省略:
i不写默认0
j不写默认最后一个
k不写,默认1
切片超出边界不报错

Eg
>>> list5
[1, 2, 3, 4, 5, 6, 7]
>>> list5[1:3]
[2, 3]
>>> list5
[1, 2, 3, 4, 5, 6, 7]

不会影响之前的列表

缺省 i:
>>> list5
[1, 2, 3, 4, 5, 6, 7]
>>> list5[:3]
[1, 2, 3]

将0到1的元素置为空
>>> list5
[1, 2, 3, 4, 5, 6, 7]
>>> list5[:2]=[]
>>> list5
[3, 4, 5, 6, 7]

删除元素:
>>> list5
[3, 4, 5, 6, 7]
>>> del list5[:1]
>>> list5
[4, 5, 6, 7]

连接和重复操作

+表示连接

>>> list6 = [1,2]
>>> list7 = [3,4]
>>> list6 + list7
[1, 2, 3, 4]
+ 只管连接 不去重复元素
+ 
>>> list6= [1,2,3]
>>> list7=[3,4,5]
>>> list6+list7
[1, 2, 3, 3, 4, 5]


*表示重复

>>> list1
[1, 3, 4]
>>> list1*3
[1, 3, 4, 1, 3, 4, 1, 3, 4]

list可以使用简洁表达式
+=
*=

成员关系操作

in & not in:
>>> li1=[1,2,3,4,5]
>>> 1 in li1
True
>>> 7 not in li1
True

count:
>>> li2 = [1,12,3,3,3,3]
>>> li2.count(3)
4

index:
指定元素第一次出现的下标
需要注意 
该函数有三个参数

index(x [ , i , j ] )
i包括
j不包括
Eg:
>>> li2 = [1,12,3,3,3,3]
>>> li2.count(3)
4
>>> li2.index(3)
2
>>> li2.index(3,4,5)
4

如果元素不在列表中,直接报错
>>> li2
[1, 12, 3, 3, 3, 3]
>>> li2.index(9)
Traceback (most recent call last):
  File "<pyshell#58>", line 1, in <module>
    li2.index(9)
ValueError: 9 is not in list

比较运算操作

>  >=  <   <=  ==

元素逐个进行比较
>>> li1 = ['a','b']
>>> li2 = ['a','b']
>>> li3 = ['a','b','c']
>>> li4 = ['c','b','a']
>>> li2==li1
True
>>> li1<li2
False
>>> li3>li4
False
>>> li4>li3
True

排序

在python里

sorted();
>>> li4
['c', 'b', 'a']
>>> sorted(li4)
['a', 'b', 'c']
>>> li4
['c', 'b', 'a']

排序后赋值:
>>> li4.sort()
>>> li4
['a', 'b', 'c']

any all

判断列表中的元素是否全部为true
>>> any([0,0,1])
True

>>> all([1,2,0])
False

列表的遍历

>>> list
['html', 'css', 'javascript']
>>> for i in list:
	print('序号 %s 值: %s'%(list.index(i),i))

	
序号 0 值: html
序号 1 值: css
序号 2 值: javascript

>>> for i in range(len(list)):
	print('序号 %s 值: %s'%(i+1,list[i]))

	
序号 1 值: html
序号 2 值: css
序号 3 值: javascript

列表的拆分

变量1,变量2,变量3,=列表

>>> a,b=[1,2]
>>> a
1
>>> b
2
>>> a,b
(1, 2)

注意:列表的个数和拆封的元素个数要一样,否则报错

一个实例:
>>> data = [1001,'Tom',[80,98,100]]
>>> data
[1001, 'Tom', [80, 98, 100]]
>>> sid,name,score = data
>>> name
'Tom'
>>> id
<built-in function id>
>>> sid
1001
>>> score
[80, 98, 100]

还可以:

>>> sid,name,[chinese,english,math]= data
>>> math
100

列表的解析(推导式)

列表的解析和推导式类似

组表达式:
>>> [ (i,i*2) for i in range(10)]
[(0, 0), (1, 2), (2, 4), (3, 6), (4, 8), (5, 10), (6, 12), (7, 14), (8, 16), (9, 18)]


>>> [ (i,i*2,i-10) for i in range(10)]
[(0, 0, -10), (1, 2, -9), (2, 4, -8), (3, 6, -7), (4, 8, -6), (5, 10, -5), (6, 12, -4), (7, 14, -3), (8, 16, -2), (9, 18, -1)]

可以做成流程控制语句:
>>> [ (i,i*2,j*10) for i in range(10) for j in range(4) if i>j]
[(1, 2, 0), (2, 4, 0), (2, 4, 10), (3, 6, 0), (3, 6, 10), (3, 6, 20), (4, 8, 0), (4, 8, 10), (4, 8, 20), (4, 8, 30), (5, 10, 0), (5, 10, 10), (5, 10, 20), (5, 10, 30), (6, 12, 0), (6, 12, 10), (6, 12, 20), (6, 12, 30), (7, 14, 0), (7, 14, 10), (7, 14, 20), (7, 14, 30), (8, 16, 0), (8, 16, 10), (8, 16, 20), (8, 16, 30), (9, 18, 0), (9, 18, 10), (9, 18, 20), (9, 18, 30)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值