list(列表)
定义:列表是一种可变的、有序的数据结构,可以随时添加和删除其中的元素。
列表非常适合利用顺序和位置定位某一元素,尤其是当元素的顺序或内容经常发生改变时。与字符串不同,列表是可变的。可以直接对原始列表进行修改:添加新元素、删除或覆盖已有元素。
创建列表
list
(列表) 是Python
中使用最频繁的数据类型,在其他语言中通常叫做数组- 列表用
[]
定义,数据之间使用,
分隔 - 列表的索引从
0
开始。索引就是数据在列表中的位置编号,索引又可以被称为下标
提示
注意:从列表中取值时,如果 超出索引范围,程序会报错
python
>>> array = [] # 用 [] 创建空列表
>>> array
[]
创建一个列表
python
>>> arr2 = [1, 2, 3, 4, 5, 6, 7]
>>> arr2
[1, 2, 3, 4, 5, 6, 7]
>>> arr3 = [1, 2, 3, True, False, int, "str", arr2] # 列表中可以存放多种数据
>>> arr3
[1, 2, 3, True, False, <class 'int'>, 'str', [1, 2, 3, 4, 5, 6, 7]]
类型转化
将其他序列类型转化为列表
python
>>> s = 'hello world !'
>>> s
'hello world !'
>>> list(s) # 使用 list() 将其他数据类型转换成列表
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', ' ', '!']
列表的序列特征
在 Python 中序列是被排成一列的对象。只要是序列类型,都可以进行取值与切片。
列表取值
使用 arr[offset]
获取与修改元素
python
>>> arr = ['a', 'b', 'c', 'd', 'e', 'f']
>>> arr[0] # 直接获取
'a'
>>> arr[-1] # 可以使用负数获取
'f'
根据索引位置修改内容
python
>>> arr[0] = 'A'
>>> arr
['A', 'b', 'c', 'd', 'e', 'f']
列表切片
切片使用索引值来限定范围,从一个大的数据容器中切出小的字符串
Python 中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。
切片方法适用于 字符串、列表、元组
格式:[start:stop:step]
,中文就是 [起始值:结束值:步长]
start
: 起始索引,从0
开始,-1
表示结束stop
:结束索引step
:步长,end-start
,步长为正时,从左向右取值。步长为负时,反向取值
python
>>> arr = list(range(10))
>>> arr
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> arr[2:5] # 指定区间切片
[2, 3, 4]
>>> arr[2:-2] # 可以使用负数
[2, 3, 4, 5, 6, 7]
>>> arr[0:9] # 从头开始切片
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> arr[0:] # 切片到末尾
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(arr[0:10])
>>> arr[:] # 省略参数切全部内容
>>> # 指定步长切片
>>> arr[0:9:1]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> arr[0:9:2]
[0, 2, 4, 6, 8]
案例
python
arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
print([arr[1], arr[2], arr[3]])
"""
`[起始值:结束值:步长]`
- start: 起始索引,从0开始,-1表示结束
- stop:结束索引
- step:步长,end-start,步长为正时,从左向右取值。步长为负时,反向取值
"""
print(arr[1:4]) # 列表切片, 顾首不顾尾
print(arr[-8:-5]) # 列表切片, 顾首不顾尾
# e
print(arr[0:5])
print(arr[4:8]) # 写了最后一个元素, 但是取不出来最后一个
print(arr[4:]) # 结束值省略,就可以取到最后一个数
print(arr[:]) # 起始值省略,默认从第一个开始取
# print(arr[4:10000]) # 切片的时候超出范围不会报错
"""切片步长"""
print(' arr:', arr)
print('arr[1:-1 ]:', arr[0:-1])
print('arr[1:-1:1]:', arr[0:-1:1])
print('arr[1:-1:2]:', arr[0:-1:2])
print('arr[1:-1:-1]:', arr[0:-1:-1])
print('arr[1:-1:-1]:', arr[7:0:-1])
print('arr[1:-1:-1]:', arr[::-1]) # 特殊用法 逆序列表
列表的方法
列表常用操作
在 ipython
中定义一个 列表,例如:arr = list()
输入 arr.
按下 TAB
键, ipython
会提示列表能够使用的函数如下:
python
In [1]: arr = list()
In [2]: arr.
arr.append() arr.count() arr.insert() arr.reverse()
arr.clear() arr.extend() arr.pop() arr.sort()
arr.copy() arr.index() arr.remove()
可以到官方网址查询使用方法:
分类 | 关键字 / 函数 / 方法 | 说明 |
---|---|---|
增加 | append() | 添加元素至尾部 |
insert() | 在指定位置插入数据 | |
删除 | clear() | 清空列表 |
pop() | 默认弹出末尾数据 | |
pop(index) | 弹出指定索引数据 | |
remove(data) | 移除指定数据 | |
修改 | extend(列表2) | 将列表2 的数据追加到列表 |
查询 | count(数据) | 统计数据出现的次数 |
index(内容) | 查询内容所在位置 | |
其他 | copy() | 将列表复制一份 |
sort() | 排序 | |
reverse() | 逆序列表 |
insert、append 需要达到熟练的程度,pop / sort 用的也比较多
列表大部分的方法都是就地操作(修改原来的内容), 拷贝一份进行操作(不会修改原来的值,但是会返回一个新的内容)
案例:
python
>>> arr = ['a', 'b', 'c', 'd', 'e']
>>> arr
['a', 'b', 'c', 'd', 'e']
>>> arr.append('f') # 添加 'f' 元素到末尾
>>> arr
['a', 'b', 'c', 'd', 'e', 'f']
>>> arr.insert(0, 'A') # 插入'A'元素到第一个
>>> arr
['A', 'a', 'b', 'c', 'd', 'e', 'f']
>>> arr.pop() # 默认弹出最后一个元素
'f'
>>> arr
['A', 'a', 'b', 'c', 'd', 'e']
>>> arr.pop(0) # 指定弹出第 0 个元素
'A'
>>> arr
['a', 'b', 'c', 'd', 'e']
>>> arr.remove('d') # 指定删除内容为 'd' 的元素
>>> arr
['a', 'b', 'c', 'e']
>>> arr.index('c') # 查询内容为 'c' 的元素在第几个位置
2
>>> arr.sort(reverse=True) # 排序后将内容输出(默认为升序)
>>> arr
['e', 'c', 'b', 'a']
新增元素
python
>>> name_list = ['正心', '全栈', '编程']
# append 追加元素到列表末尾
>>> name_list.append('python')
>>> name_list
['正心', '全栈', '编程', 'python']
# insert 插入元素到指定位置之前
>>> name_list.insert(0, '0基础')
>>> name_list
['0基础', '正心', '全栈', '编程', 'python']
拓展列表
python
arr1 = ['老师1', '老师2']
arr2 = ['老师3', '老师4']
# arr1.append(arr2) # append 是追加元素,如果追加的是列表,会把整个列表放进去
>>> arr1 = ['老师1', '老师2']
>>> arr2 = ['老师3', '老师4']
>>> arr1.append(arr2)
>>> arr1
['老师1', '老师2', ['老师3', '老师4']]
# 遍历添加元素
>>> arr1 = ['老师1', '老师2']
>>> arr2 = ['老师3', '老师4']
>>> for name in arr2:
... arr1.append(name)
...
>>> arr1
['老师1', '老师2', '老师3', '老师4']
# extend 将一个列表的元素追加到另一个列表的末尾
>>> arr1 = ['老师1', '老师2']
>>> arr2 = ['老师3', '老师4']
>>> arr1.extend(arr2)
>>> arr1
['老师1', '老师2', '老师3', '老师4']
删除元素
python
name_list = ['正心', '全栈', '编程', '老师1', '老师2']
# pop 默认弹出最后一个元素 (有返回值)
>>> name_list = ['正心', '全栈', '编程', '老师1', '老师2']
>>> item1 = name_list.pop()
>>> item2 = name_list.pop()
>>> item1, item2
('老师2', '老师1')
# pop(index) 可以指定索引进行弹出
>>> name_list
['正心', '全栈', '编程']
>>> item0 = name_list.pop(0)
>>> name_list
['全栈', '编程']
>>> item0
'正心'
# remove 指定内容进行删除
>>> item = name_list.remove('编程') # remove 删除内容是没有返回值的
>>> item
>>> name_list
['全栈']
>>> name_list.remove('编程') # 没有的内容再次删除会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
# 清空列表
>>> name_list.clear()
>>> name_list
[]
修改元素
python
name_list = ['正心', '老师2', '老师3']
# 修改列表元素
name_list[0] = '正心全栈编程'
print(name_list)
name_list.reverse() # 列表逆序输出
print(name_list)
arr = [1, 5, 2, 3, 6, 8]
arr.sort(reverse=True) # 列表排序
print(arr)
获取元素位置
python
>>> arr = ['正心', '老师2', '老师3']
# index 获取元素在列表当中的位置
>>> arr.index('老师2')
1
>>> arr[arr.index('老师2')]
'老师2'
# 如果元素不存在就会报错
>>> arr.index('老师4')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: '老师4' is not in list
# 统计元素在列表当中出现的次数
>>> arr.count('正心1')
0
# 获取列表长度
>>> len(arr)
3
案例-列表方法
分配位置
给员工分配位置
python
# 员工
name_list = ['邓永明', '廖德超', '张勇', '杨久林', '戴贵富', '秦代坤', '李元东', '田显余']
# 办公室名字
site_list = ['1号办公室1位置', '1号办公室2位置', '1号办公室3位置',
'2号办公室1位置', '2号办公室2位置', '2号办公室3位置',
'3号办公室1位置', '3号办公室2位置']
# 答案存放的列表
content = []
参考代码
python
# 员工
name_list = ['邓永明', '廖德超', '张勇', '杨久林', '戴贵富', '秦代坤', '李元东', '田显余']
# 办公室名字
site_list = ['1号办公室1位置', '1号办公室2位置', '1号办公室3位置',
'2号办公室1位置', '2号办公室2位置', '2号办公室3位置',
'3号办公室1位置', '3号办公室2位置']
# 答案存放的列表
content = []
for index in range(len(name_list)):
content.append([name_list[index], site_list[index]])
print(content)
"""随机分配位置 随机数模块"""
import random
print(random.randint(1, 10)) # 生成 1-10 的随机数(包括10) 顾首又顾尾
移动位置
现有办公室座位表 seating
如下
先要求从 1 号办公室、2号办公室中分别随机抽一个安排到4号办公室去
- 随机从1号 2号办公室中选取一个人
- 将其安排到4号办公室去
- 最后先安排好的座位表打印
python
import random
seating = [
('1号办公室1位置', '戴贵富'),
('1号办公室2位置', '田显余'),
('1号办公室3位置', '李元东'),
('2号办公室1位置', '廖德超'),
('2号办公室2位置', '秦代坤'),
('2号办公室3位置', '杨久林'),
('3号办公室1位置', '邓永明'),
('3号办公室2位置', '张勇')
]
提示
可以导入随机函数模块 random
python
import random
random.randint(a, b)
在 [a, b]
之间返回一个随机整数,包括 a, b 本身。
参考代码
python
# 1. 随机从1号 2号办公室中选取一个人
person2 = seating.pop(random.randint(3, 5))
person1 = seating.pop(random.randint(0, 2))
print(person1, person2)
person2 = ('4号办公室1位置', person2[1])
person1 = ('4号办公室2位置', person1[1])
seating.append(person2)
seating.append(person1)
for site in seating:
print(site)
随机安排座位
有 N 个人要参加会议,现在需要随机安排座位。
请用 python 实现将 N 个人随机安排座位
python
import random
# 有多少个人
name_list = [
'邓永明', '廖德超', '张勇', '杨久林',
'戴贵富', '秦代坤', '李元东', '田显余'
]
site_list = [
'1号办公室1位置', '1号办公室2位置', '1号办公室3位置',
'2号办公室1位置', '2号办公室2位置', '2号办公室3位置',
'3号办公室1位置', '3号办公室2位置'
]
# 答案放这里
seating = []
参考代码
python
for i in range(len(site_list)):
index = random.randint(0, len(site_list) - 1)
data = site_list.pop(index)
seating.append([name_list[i], data])
print(seating)
二维列表
python
# 定义:列表是一种可变的、有序的数据容器,可以随时添加和删除其中的元素
array = [1, 2, 3, 4, 5]
array2 = [
# [1, 2, 3, 4, 5],
array,
['1', '2', '3', '4'],
"abscdfg",
]
print(array2[1])
print(array2[1][1])
"""根据下标遍历二维列表的值"""
# 取 二维列表里面的值
# len 获取一个对象的长度
array2_len = len(array2)
print(array2_len)
for i in range(array2_len):
# print(i)
print(array2[i])
# 先获取二维列表的长度
for j in range(len(array2[i])):
print(array2[i][j])
"""直接遍历二维列表的值"""
for row in array2:
for col in row:
print(col)
"""
len 只能获取容器、序列等有长度的对象的长度
根据下标遍历 :就能去修改里面的值,可以精确的操作某一个元素
直接遍历 :只能把内容一个个遍历出来
"""
案例:古诗词转置
python
"""
案例展示用 python 实现古诗词横竖两种版本效果图
实现横向打印效果如下
千山鸟飞绝
万尽人踪灭
孤舟梭立翁
独钓寒江雪
实现竖向打印效果如下
千万孤独
山尽舟钓
鸟人梭寒
飞踪立江
绝灭翁雪
"""
python
poetry = [
['千', '山', '鸟', '飞', '绝'],
['万', '尽', '人', '踪', '灭'],
['孤', '舟', '梭', '立', '翁'],
['独', '钓', '寒', '江', '雪'],
]
for row_index in range(0, len(poetry)):
# print('row_index', row_index)
# print(f'poetry[{row_index}]', poetry[row_index])
for col_index in range(0, len(poetry[row_index])):
# print('col_index', col_index)
# print(f'poetry[{row_index}][{col_index}]', poetry[row_index][col_index])
print(poetry[row_index][col_index], end='\t')
# row_index 0 1 2 3
# col_index 0 1 2 3 4 # print(poetry[col_index][row_index], end='\t')
print()
# 先获取列元素
for col_index in range(0, len(poetry[0])):
for row_index in range(0, len(poetry)):
print(poetry[row_index][col_index], end='\t')
print()