3. python 列表、元组和字典

一、 序列简介

  • 序列是一种包含多项数据的数据结构
  • python常见序列类型包括字符串、元组、列表等
  • 其中字符串与元组是不可变的,而列表是可变的
  • 元组创建列表使用(),而列表使用[]
>>> my_tuple=('fff',20,'dddd')
>>> print(type(my_tuple))
<class 'tuple'>
>>> print(my_tuple)
('fff', 20, 'dddd')

>>> my_list=['fff',20,'dddd']
>>> print(type(my_list))
<class 'list'>
>>> print(my_list)
['fff', 20, 'dddd']

二、列表与元组通用用法

只要不涉及改变元素操作,列表与元组用法是相同的,下面以元组操作为例

1. 通过索引使用元素——同字符串

>>> my_tuple=('fff',20,'dddd')
>>> print(my_tuple[0])
fff
>>> print(my_tuple[-1])
dddd
>>> print(my_tuple[:2])
('fff', 20)
>>> print(my_tuple[1:])
(20, 'dddd')

#间隔为2
>>> print(my_tuple[0:3:2])
('fff', 'dddd')

2. 加法

  • 元组(列表)的加法是将多个元组(列表)的值合并在一起
  • 元组不能与列表直接相加
>>> tuple1=(555,'dads',344,'aaa')
>>> tuple2=(666,'dads',888,'dddaa')
>>> print(tuple1+tuple2)
(555, 'dads', 344, 'aaa', 666, 'dads', 888, 'dddaa')
>>> print(tuple1)
(555, 'dads', 344, 'aaa')
>>> print(tuple2)
(666, 'dads', 888, 'dddaa')

3. 乘法

元组(列表)的乘法是将其中元素的值重复n次

>>> print(tuple1*3)
(555, 'dads', 344, 'aaa', 555, 'dads', 344, 'aaa', 555, 'dads', 344, 'aaa')

4. in,len(),min(),max()用法与字符串相同

5. 序列封包与序列解包

  • 序列封包:将多个值赋给一个变量时,python会自动将多个值封装为元组
  • 序列解包:允许将元组或列表之间赋给多个变量,此时其中元素会依次赋值给各个变量(数量需相同)
>>> a=12,'dsada',15
>>> print(a)
(12, 'dsada', 15)

>>> x,y,z=a
>>> print(x)
12
>>> print(y)
dsada
>>> print(z)
15

序列解包也允许只解出部分变量,其余变量使用列表保存。在变量前添加*则该变量代表一个列表

>>> mylist=[1,2,3,4,5,6]
>>> x,*y,z=mylist
>>> print(x)
1
>>> print(y)
[2, 3, 4, 5]
>>> print(z)
6

6. 序列转换

将对象转换为列表 list()

>>> tuple=(1,2,3,4)
>>> list=list(tuple)
>>> print(list)
[1, 2, 3, 4]

将对象转换为元组 tuple()

a_list=[1,2,3,4,5]
tuple2=tuple(a_list)
print(tuple2)   #(1, 2, 3, 4, 5)

三、 列表专用用法

1. 增加元素

append——追加至列表最后面,会将追加元素当作一个整体

>>> mylist=[323,'dasda',444]
>>> mylist.append('rrr')
>>> print(mylist)
[323, 'dasda', 444, 'rrr']
>>> mylist.append((1,5,8))
>>> print(mylist)
[323, 'dasda', 444, 'rrr', (1, 5, 8)]
>>> mylist.append([66,'fdfs'])
>>> print(mylist)
[323, 'dasda', 444, 'rrr', (1, 5, 8), [66, 'fdfs']]

extend——追加至列表最后面,会分别追加其中每个元素

>>> mylist=[323,'dasda',444]
>>> mylist.extend('rrr')
>>> print(mylist)
[323, 'dasda', 444, 'r', 'r', 'r']
>>> mylist.extend((1,5,8))
>>> print(mylist)
[323, 'dasda', 444, 'r', 'r', 'r', 1, 5, 8]
>>> mylist.extend([66,'fdfs'])
>>> print(mylist)
[323, 'dasda', 444, 'r', 'r', 'r', 1, 5, 8, 66, 'fdfs']

insert——在指定位置增加元素

>>> mylist=[1,2,3,4,5]
>>> mylist.insert(3,'yyy')
>>> print(mylist)
[1, 2, 3, 'yyy', 4, 5]
>>> mylist.insert(3,(444,666))
>>> print(mylist)
[1, 2, 3, (444, 666), 'yyy', 4, 5]

2. 删除元素

del语句——可删除一个元素,也可删除列表中的一段

>>> print(mylist)
[1, 2, 3, (444, 666), 'yyy', 4, 5]

>>> del mylist[2]
>>> print(mylist)
[1, 2, (444, 666), 'yyy', 4, 5]

#删除索引为3-5的元素(不含5)
>>> del mylist[3:5]
>>> print(mylist)
[1, 2, (444, 666), 5]

#删除索引为0-5的元素,间隔为2(不含5)
>>> del mylist[0:5:2]
>>> print(mylist)
[2, 5]

remove()方法——根据给定值在列表中查找并删除第一次找到的值,若找不到对应值会报错

>>> mylist=[1,2,3,3,3,4,5]
>>> mylist.remove(3)
>>> print(mylist)
[1, 2, 3, 3, 4, 5]
>>> mylist.remove('ff')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

clear()方法——清空列表

>>> print(mylist)
[1, 2, 3, 3, 4, 5]
>>> mylist.clear()
>>> print(mylist)
[]

3. 修改元素

非常简单,直接赋值

>>> mylist=[1,2,3,3,3,4,5]
>>> mylist[3]=666
>>> print(mylist)
[1, 2, 3, 666, 3, 4, 5]

#将索引为1,2对应元素换为x,y
>>> mylist[1:3]='xy'
>>> print(mylist)
[1, 'x', 'y', 666, 3, 4, 5]

#将索引为1对应元素换为a,b,c,d,e
>>> mylist[1:2]='abcde'
>>> print(mylist)
[1, 'a', 'b', 'c', 'd', 'e', 'y', 666, 3, 4, 5]

4. 其他常用方法

>>> print(mylist)
[1, 'a', 'b', 'c', 'd', 'e', 'y', 666, 3, 4, 5]

#统计元素个数
>>> print(mylist.count('d'))
1

#查找元素位置
>>> print(mylist.index('d'))
4

#指定查找范围,若找不到会报错
>>> print(mylist.index('d',5,7))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'd' is not in list
>>>

#按后进先出删除元素
>>> print(mylist.pop())
5
>>> print(mylist.pop())
4
>>> print(mylist)
[1, 'a', 'b', 'c', 'd', 'e', 'y', 666, 3]

#翻转元素
>>> print(mylist.reverse())
None
>>> print(mylist)
[3, 666, 'y', 'e', 'd', 'c', 'b', 'a', 1]
>> mylist.reverse()
>>> print(mylist)
[1, 'a', 'b', 'c', 'd', 'e', 'y', 666, 3]

#将元素排序,字符串与数值一起排会报错
>>> mylist.sort()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'int'

>>> a_list=[2,4,6,8,3,4,1]
>>> a_list.sort()
>>> print(a_list)
[1, 2, 3, 4, 4, 6, 8]
#逆序排序
>>> a_list.sort(reverse=True)
>>> print(a_list)
[8, 6, 4, 4, 3, 2, 1]

#字符串默认按ASCII码排序
>>> b_list=['a','rrr','aaa','bb']
>>> b_list.sort()
>>> print(b_list)
['a', 'aaa', 'bb', 'rrr']

#按字符串长度排序(逆序)
>>> b_list.sort(key=len,reverse=True)
>>> print(b_list)
['aaa', 'rrr', 'bb', 'a']

四、字典用法

存放具有映射关系的数据,是一些键值对。

1. 创建字典

使用{}创建

>>> score={'math':89,'english':95}
>>> print(score)
{'math': 89, 'english': 95}
>>> print(type(score))
<class 'dict'>

#key值可为元组
>>> dict={(20,30):'fff',30:'good'}
>>> print(dict)
{(20, 30): 'fff', 30: 'good'}

#key值不能为列表(因为列表值可变)
>>> dict={[20,30]:'fff',30:'good'}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

使用dict()函数创建

 

上一篇:《我会喊666》第一次作业:信北A404会议室网上预约系统


下一篇:es6 模本字符串拼接方法 ``