数据容器
list
取出列表mylist的最后一个元素
num = mylist[-1]
序列
序列支持切片,即:列表、元组、字符串,均支持进行切片操作
切片:从一个序列中,取出一个子序列
语法:序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列:
结束下标 (不含) 表示何处结束,可以留空,留空视作截取到结尾
步长表示,依次取元素的间隔
步长1表示,一个个取元素
步长2表示,每次跳过1个元素取
步长N表示,每次跳过N-1个元素取
步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记,一般用负数,见下例)
有字符串:“万过薪月,员序程马黑来,nohtyP学”
请使用学过的任何方式,得到"黑马程序员"
my_str = "万过薪月,员序程马黑来,nohtyP学"
print(my_str.split(',')[1][-2::-1])
set
# 定义一个空集合
my_set = set()
# 定义一个空字典
my_dict = {} # 一定注意,这个定义出来时字典而非集合
my_dict = dict()
# 定义只有一个元素的元组
my_tuple = (1, )
案例
1.幸运数字6:输入任意数字,如数字8,生成nums列表,元素值为1~8,从中选取幸运数字(能够被6整除)移动到新列表lucky,打印nums与lucky。
# Task 1: 幸运数字6
# 输入任意数字
num = int(input("请输入一个数字:"))
# 生成nums列表
nums = list(range(1, num + 1))
# 从nums列表中选取幸运数字(能被6整除)
lucky = [x for x in nums if x % 6 == 0]
# 打印nums与lucky
print("nums列表:", nums)
print("幸运数字列表:", lucky)
语法:range(start, stop[, step])
- Python3 range()函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。
- start: 计数从 start 开始。默认是从0 开始。例如 range(5) 等价于 range(0, 5)
- stop: 计数到 stop 结束,但不包括stop。例如:range(0, 5) 是 [0, 1, 2, 3, 4] 没有 5
- step:步长,默认为 1。例如:range(0,5) 等价于 range(0, 5, 1)
2.列表嵌套:有3个教室[[], [], []],8名讲师[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’],将8名讲师随机分配到3个教室中
# Task 2: 列表嵌套
import random
# 3个教室
classrooms = [[], [], []]
# 8名讲师
teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
# 将8名讲师随机打乱
random.shuffle(teachers)
for teacher in teachers:
classroom_index = random.randint(0, 2) # 随机选1个教室分配1个随机老师
classrooms[classroom_index].append(teacher)
# 打印分配结果
for i, classroom in enumerate(classrooms):
print(f"教室 {i+1}:", classroom)
shuffle() 方法将序列的所有元素随机排序。
以下是 shuffle() 方法的语法:
import random
random.shuffle (lst )
注意:shuffle()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
random.randint()的函数原型为:random.randint(a,b)
用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b(注意要取右端点)
文件操作
文件读取
操作 | 功能 |
---|---|
文件对象.read(num) | 读取指定长度字节 不指定num读取文件全部 |
文件对象.readline() | 读取一行 |
for line in 文件对象 | for循环文件行,一次循环得到一行数据 |
文件对象.readlines() | 读取全部行,得到列表 |
前3个方法的返回值均是str类型,第4个的返回值是str类型的list
单词计数
通过Windows的文本编辑器软件,将如下内容,复制并保存到:word.txt,文件可以存储在任意位置
itheima itcast python
itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima
通过文件读取操作,读取此文件,统计itheima单词出现的次数
# 解法1
with open('word.txt', 'r', encoding='utf-8') as f:
my_list = []
for line in f:
# 去除开头和结尾的空格以及换行符再分割
# 否则会导致每行末尾的单词分割后包含换行符
# 进而导致list的元素统计出错
# 解法2却不需要去除
# 因为它是用的str的字串统计
my_list.extend(line.strip().split(' '))
word_count = my_list.count('itheima')
print(word_count)
# 解法2
word_count = 0
with open('word.txt', 'r') as f:
for line in f:
print(line)
word_count += line.count('itheima')
print(word_count)
文件写入与追加
差异点
写入 | 追加 |
---|---|
使用open函数的”w”模式进行写入 | 使用open函数的”a”模式进行写入 |
文件存在,会清空原有内容 | 文件存在,会在原有内容后面继续写入 |
共同点
- 写入的方法都有:
- wirte(),写入内容
- flush(),刷新内容到硬盘中
- 文件不存在,都会创建新文件
补充
在使用f.write()方法写入时,可以使用”\n”来写出换行符
用反斜杠\换行拼接两行时,一定不要添加不属于文本信息本身的内容,比如制表符(缩进)、空格等