Python学习day6(Python中的列表和元组)

列表(list)

一、列表的格式

[数据1,数据2,数据3,······]
列表可以一次性存储多个数据,而且这些数据可以是不同的数据类型。
但我们一般建议存储的数据为同一种数据类型。

二、列表的常用操作

1.查找

可以通过下标来找到列表中对应的数据。

另外,还有一些查找相关的函数:

  • index():返回指定数据所在位置的下标。如果该数据不在列表里,则报错:ValueError: 'TOMS' is not in list
name_list = ['TOM', 'Lily', 'ROSE']
print(name_list.index('Lily')) # 1
print(name_list.index('TOMS')) # ValueError: 'TOMS' is not in list
  • count():统计指定数据在当前列表中出现的次数。
name_list = ['TOM', 'Lily', 'ROSE']
print(name_list.count('TOM')) # 1
print(name_list.count('TOMS')) # 0
  • len():获取列表的长度,即列表中数据的个数。
name_list = ['TOM', 'Lily', 'ROSE']
print(len(name_list)) # 3

判断是否存在

  • in:判断指定数据是否在某个列表序列,如果,返回True,否则返回False
name_list = ['TOM', 'Lily', 'ROSE']
print('TOM' in name_list) #True
print('TOMS' in name_list) #False
  • not in:判断指定数据是否在某个列表序列,如果不在,返回True,否则返回False
name_list = ['TOM', 'Lily', 'ROSE']
print('TOM' not in name_list) #False
print('TOMs' not in name_list) #True

in 和 not in 是一个公共操作,也就是说,in 和 not in 也同样适用于元组(tuple),序列(set)以及字典(dict)类型。

2.增加

  • append():在列表结尾追加数据。
name_list = ['TOM', 'Lily', 'ROSE']

name_list.append('xiaoming')
print(name_list) #['TOM', 'Lily', 'ROSE', 'xiaoming']
name_list.append([11, 22])
print(name_list) #['TOM', 'Lily', 'ROSE', 'xiaoming', [11, 22]]

由此可见,列表数据可改的,所以列表属于可变数据类型。
append()函数追加数据的时候如果数据是一个序列,追加整个序列到列表的结尾。

  • extend():在列表结尾追加数据,如果数据是一个序列,则将这个序列中的数据逐一添加到列表。
name_list = ['TOM', 'Lily', 'ROSE']

name_list.extend('boy')
print(name_list) #['TOM', 'Lily', 'ROSE', 'b', 'o', 'y']
name_list.extend(['boy', 'xiaohong'])
print(name_list) #['TOM', 'Lily', 'ROSE', 'b', 'o', 'y', 'boy', 'xiaohong']

extend()函数追加数据的时候如果数据是一个序列,把数据序列里面的数据拆开然后逐一追加到列表的结尾。

  • insert():可以在指定位置新增数据。
name_list = ['TOM', 'Lily', 'ROSE']
# name_list.insert(下标, 数据)
name_list.insert(1, 'aaa')
print(name_list)

3.删除

  • del:可以删除整个列表,也可以删除列表里指定数据。
    删除整个列表:
name_list = ['TOM', 'Lily', 'ROSE']
del name_list
del(name_list)

删除指定数据:

del name_list[0]
print(name_list) #['Lily', 'ROSE']
  • pop():删除指定下标的数据,如果不指定下标,默认删除最后一个数据,并将删除的数据返回。
name_list = ['TOM', 'Lily', 'ROSE']
del_name = name_list.pop()
print(del_name) #ROSE
print(name_list) #['TOM', 'Lily']
del_name = name_list.pop(1)
print(del_name) #Lily
print(name_list) #['TOM']
  • remove():移除列表中某个数据的第一个匹配项。如果找不到匹配项,则报错:ValueError: list.remove(x): x not in list
name_list = ['TOM', 'Lily', 'ROSE']
name_list.remove('ROSE')
print(name_list) #['TOM', 'Lily']
name_list.remove("aa")
print(name_list) #ValueError: list.remove(x): x not in list
  • clear():清空整个列表。
name_list = ['TOM', 'Lily', 'ROSE']
name_list.clear()
print(name_list) #[]

4.修改

  • 修改指定下标数据
name_list = ['TOM', 'Lily', 'ROSE']
name_list[0] = 'aaa'
print(name_list) #['aaa', 'Lily', 'ROSE']
  • 逆置:reverse()
list1 = [1, 3, 2, 5, 4, 6]
list1.reverse()
print(list1) #[6, 4, 5, 2, 3, 1]
  • 排序:sort()
list1 = [1, 3, 2, 5, 4, 6]
list1.sort()
print(list1) #[1, 2, 3, 4, 5, 6]
list1.sort(reverse=False)
print(list1) #[1, 2, 3, 4, 5, 6]
list1.sort(reverse=True)
print(list1) #[6, 5, 4, 3, 2, 1]

5.复制

数据的来源不易:人工手动输入数据,爬虫爬取到的数据,通过统计得到的数据,通过用户注册或其他行为得来的数据,这些数据可能都是非常重要的。所以我们在修改或删除数据之前,都要事先将原始数据复制出来几份作为备份。
函数:

  • copy()
name_list = ['TOM', 'Lily', 'ROSE']
list1 = name_list.copy()
print(list1) #['TOM', 'Lily', 'ROSE']
print(name_list) #['TOM', 'Lily', 'ROSE']

三、列表的循环遍历

1.利用while遍历

name_list = ['TOM', 'Lily', 'ROSE']

i = 0
while i < len(name_list):
    print(name_list[i])
    i += 1

2.利用for遍历

name_list = ['TOM', 'Lily', 'ROSE']

for i in name_list:
    # 遍历序列中的数据
    print(i)

由此可见,遍历列表中的元素时使用for循环更加简洁方便。

四、列表的嵌套

所谓列表嵌套指的就是一个列表里面包含了其它的子列表。它很像Java中的多维数组。
例如:

name_list = [['TOM', 'Lily', 'Rose'], ['张三', '李四', '王五'], ['xiaohong', 'xiaoming', 'xiaolv']]

如果要查找李四:

print(name_list[1][1]) #李四

五、列表之综合应用—随机分配办公室

# 需求:8位老师,3个办公室, 将8位老师随机分配到3个办公室
"""
步骤:
1. 准备数据
    1.1 8位老师 -- 列表
    1.2 3个办公室 - 列表嵌套

2. 分配老师到办公室
    *** 随机分配
    就是把老师的名字写入到办公室列表 -- 办公室列表追加老师名字数据

3. 验证是否分配成功
    打印办公室详细信息:每个办公室的人数和对应的老师名字
"""

import random
# 1. 准备数据
teachers = ["李华","TOM","Ben","Rose","小明","小红","华华","艾斯","秃头"]
offices = [[], [], []]

# 2. 分配老师到办公室 -- 取到每个老师放到办公室列表 -- 遍历老师列表数据
for name in teachers:
    # 列表追加数据 -- append(选中) extend insert
    # xx[0] -- 不能指定是具体某个下标 -- 随机
    num = random.randint(0, 2)
    offices[num].append(name)
# print(num)

# print(offices)

# 为了更贴合生活,把各个办公室子列表加一个办公室编号 1, 2, 3
i = 1
# 3. 验证是否分配成功
for office in offices:
    # 打印办公室人数 -- 子列表数据的个数  len()
    print(f"{i}号办公室分配到{len(office)}位老师,他们是:")
    # 打印老师的名字
    # print()  --  每个子列表里面的名字个数不一定 -- 遍历 -- 子列表
    for name in office:
        print(name)

    i += 1

元组(tuple)

一、元组的应用场景

如果想要存储多个数据,而且这些数据必须不能够被修改。那么元组将是一个合适的选择。

元组中存放的数据,以及元组本身都是不可改变的,属于不可变类型。
但是列表是可变类型。

二、定义元组

# 1. 多个数据元组
t1 = (10, 20, 30)
print(type(t1)) #<class 'tuple'>

# 2. 单个数据的元组
t2 = (10,)
print(type(t2)) #<class 'tuple'>

【注意】:如果定义的元组里只存放了一个数据,那么这个数据后面也应该添加逗号,否则,它的数据类型就不是元组而是该数据的数据类型。

# 3. 如果单个数据的元组不加逗号
t3 = (10)
print(type(t3))  # <class 'int'>

t4 = ('aaa')
print(type(t4))  # <class 'str'>

三、元组的常用操作

元组不支持修改,只支持查找。

以下我们使用这个元组来操作:

t1 = ('aa', 'bb', 'cc', 'bb')
  • 按下标查找数据
print(t1[0]) #aa
  • index()
print(t1.index('bb')) #1
print(t1.index('bbb')) #ValueError: tuple.index(x): x not in tuple
  • count()
print(t1.count('aa')) #1
print(t1.count('aaa')) #0
  • len()
print(len(t1)) #4

如果元组里面有列表,可以修改列表里的数据(这不常用,谨慎使用)

如果直接使用下标修改元组里的数据,会直接报错:TypeError: 'tuple' object does not support item assignment

但是,如果元组里面有列表,修改列表里的数据是支持的。

t2 = ('aa', 'bb', ['cc', 'dd'])
t2[2][0] = 'TOM'
print(t2) #('aa', 'bb', ['TOM', 'dd'])
发布了68 篇原创文章 · 获赞 57 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43598138/article/details/104642644
今日推荐