Python基础笔记2(容器:字符串列表集合)
1.字符串
str_data = ‘abcdef’
索引取值(下标取值)
print(str_data[2]) # c
print(str_data[-2]) # e
a b c d e f
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
切片取值
print(str_data[:2]) # ab
开始位省略,切片取值从第0位开始,最后到的内容不包含截止位本身
print(str_data[:-2]) # abcd
结束位参数如果为正数,从左向右取,不包含本身;负数,从右向左,不包含本身
print(str_data[2:]) # cdef
如果没有结束位,从下标开始位开始(含下标位),到字符串最后截止
print(str_data[1:-1]) # bcde 从开始位开始,到截止位前一位
str_num = '0123456789'
print(str_num[1:7:2]) # 135 从第1位1开始,根据步长2,再取3,5,直至索引7的前一位结束。
str_num[起始位:结束位:步长],步长不写,默认从左向右步长为1
切片逆向取值
print(str_data[4:1:-1]) # edc
print(str_data[4:1:-2]) # ec
起始位(4)在截止位(1)右面,步长(-2)必须为负数;起始位在截止位左面,步长必须为正数
步长为正数,从左向右;步长为负数,从右向左
print(str_data[::2]) # ace
print(str_data[::-2]) # fdb
起始位,结束位都不写,
如果步长为正数,则默认以步长(2)从左向右
如果步长为负数,则默认以步长(-2)从右向左
2.字符串(str)常见操作
replace,split,strip,join四个方法必须记住
find方法(不需要记,基本用正则)
检测str是否包含在my_str字符串中,如果是返回开始的索引值,否则返回-1
my_str = "welcome to www.tulingxueyuan.com"
print(my_str.find("to")) # 8
rfind方法(也不需要记,几乎用不到)
类似于find()函数,不过是从右边开始,返回的索引是从左边开始
print(my_str.rfind("to")) # 8
count方法(稍微记忆)
返回str在start和end之间在my_str里面出现的次数
my_str.count(str, start=0,end=len(mystr)) 默认start=0,end=len(mystr),上面的find与rfind一样
print(my_str.count("c")) # 2
replace方法(记牢,经常用到)
my_str.replace(str1, str2,mystr.count(str1)) (被替换的字符串,替换成的字符串,替换的次数(默认所有))
replace并不会对my_str本身进行替换,如果想记录替换后的内容,还需要将替换操作赋值给一个变量。
print(mystr.replace('co','CO')) # 打印出来,所有小写的co变成了大写的CO,mystr中的内容实际还是小写
split方法(记牢,经常用到)
以str为分隔符切片my_str,如果maxsplit有指定值,则仅分隔maxsplit个字符串。否则全部分隔
my_str.split(str=" ",maxsplit) 默认以空格为分隔符,可以不写。如果写了maxsplit,分隔符必须要写
print(my_str.split()) # ['welcome', 'to', 'www.tulingxueyuan.com'] # 默认str为空格,最大程度分割,以列表的形式返回
print(my_str.split(" ", 1)) # ['welcome', 'to www.tulingxueyuan.com']
startswith方法(无需记忆)
检查字符串是否以自定的字符串开头,是返回True,否返回False
my_str.startswith('指定的字符串')
endswith方法(无需记忆)
检查字符串是否以自定的字符串结尾,是返回True,否返回False
my_str.endswith('指定的字符串')
lower方法(需要记忆,一般用于后端开发,如验证码)
转换my_str中所有大小写字符为小写
my_str.lower()
upper方法(需要记忆)
转换my_str中所有小写字母为大写
my_str.upper()
strip方法(必须记忆)
删除字符串两端的空白字符,中间的空格不会去除
my_str.strip()
partition方法(几乎用不到)
把my_str以str分割成三部分,str前,str,和str后
splitlines方法(几乎用不到)
my_str.splitlines()
按照行进行分割,返回一个包含各行作为元素的列表
isalpha方法(有时会用到,但是不需要记)
如果my_str所有字符都是英文字母,则返回True,否则返回False
my_str.isalpha()
isdigit方法
如果my_str只包含数字,则返回True,否则返回False
my_str.isdigit()
isalnum方法
如果my_str所有字符都是英文字母或者数字,则返回True,否则返回False
my_str.isalnum()
join方法(必须要记)
my_str 中每个元素后面插入str,构造出一个新的字符串
my_str.join(str)
如:
my_str = '-'
str_list = ['welcome', 'to', 'www.tulingxueyuan.com']
print(my_str.join(str_list)) # 'welcome-to-www.tulingxueyuan.com' # 将str_list列表中的每个元素以my_str值'-'拼接起来
3.列表(list)
定义列表的方式为[],里面的内容叫元素
data_list = [1, '顾安', 2, '安娜', 3, '双双', 3.14]
print(data_list[3]) # 安娜
切片
和字符串切片几乎一样
print(data_list[1:5]) # ['顾安', 2, '安娜', 3]
print(data_list[::-1]) # [3.14, '双双', 3, '安娜', 2, '顾安', 1]
遍历
for item in data_list:
print(item) # 会依次将内容一一打出
计数器len方法依次打印
i = 0
while i < len(data_list):
print(data_list[i])
i += 1
len方法是用于计算容器的长度的方法。
4. 列表的相关操作方法(都要记住)
列表,最大的特点是能够存储多个数据,一般情况下,我们需要对这个列表进行数据的增删改查
数据增加(append,extend,insert)
append方法
通过append可以向列表添加元素,且只能添加单个元素,一个个添加
列表.append(新元素数据)
stu_name = ['张三', '李四', '王五']
stu_name.append(‘赵六’)
print(stu_name) # ['张三', '李四', '王五', '赵六']
extend方法
通过extend添加一个新列表,可以有多个值
new_str_name = ['AA', 'BB', 'CC']
stu_name.extend(new_str_name)
print(stu_name) # ['张三', '李四', '王五', '赵六', ‘AA’,‘BB’,‘CC’]
如果添加的不是列表,而是字符串,比如'FF',那么,相当于在'CC'后新增'F', 'F'两个F
insert方法
insert 在指定位置插入一个新的元素
参数1:列表的索引
参数2:需要传递的参数
stu_name.insert(0, 'DD')
print(stu_name) # ['DD', '张三', '李四', '王五', '赵六', ‘AA', 'BB', 'CC']
当然insert也可以传递插入一个列表进去,但是传入的列表只能整体作为一个元素
stu_name.insert(0, [1, 2, 3, 4])
print(stu_name) # [[1, 2, 3, 4], 'DD', '张三', '李四', '王五', '赵六', ‘AA', 'BB', 'CC']
数据修改
通过列表的索引进行修改
new_name = 'dd'
stu_name[1] = new_name
print(stu_name) # [[1, 2, 3, 4], 'dd', '张三', '李四', '王五', '赵六', ‘AA', 'BB', 'CC']
数据查询(in,not in,count)
in(存在),如果存在那么结果返回True,否则返回False
数据 in 列表
not in(不存在),如果不存在那么结果为True,否则False
数据 not in 列表
print('DD' in stu_name) # False
print('DD' not in stu_name) # True
print(stu_name.count('DD')) # 0 # DD在列表中出现了0次
数据删除
del删除(知道索引,只能接收索引)
del stu_name[8] #根据当前索引删除索引8
print(stu_name) # [[1, 2, 3, 4], 'dd', '张三', '李四', '王五', '赵六', ‘AA', 'BB']
注:如果del stu_name,将会删除整个列表。查询元素索引可以用index,如stu_name.index('BB') # 7
pop弹出(知道索引,只能接收索引)
pop可以把最后一个值弹出,并且还可以同时赋值给一个变量
name = stu_name.pop() # 默认弹出最后一个元素,如果写索引,可以弹出指定位置元素,如pop(-2),弹出的是'AA',而非'BB'
print(stu_name) # [[1, 2, 3, 4], 'dd', '张三', '李四', '王五', '赵六', ‘AA']
print(name) # BB
remove移除(不知道索引,删除的指定元素遇到的第一个值)
stu_name.remove(‘dd’) # 删除指定元素遇到的第一个值,剩余的不会继续删除
print(stu_name) # [[1, 2, 3, 4], '张三', '李四', '王五', '赵六', ‘AA']
数据排序(sort)
正序
int_list = [1, 3, 2, 4]
int_list.sort()
print(int_list) # [1, 2, 3, 4]
倒序
int_list.sort(reverse=True)
print(int_list) # [4, 3, 2, 1]
按照ASCII码排序,中文是按UNICODE编码排序
嵌套列表
随机数生成需要导入random模块
输出结果:
5.元组(tuple)的相关操作方法
元组
如果声明元组之后的元组元素只有一个,那么打印类型的时候打印的就是元组里数据的类型
所以定义元组,在第一个元素后,必须要存在一个逗号,
int_tuple = (1) # type(int_tuple)的结果为int
int_tuple = (1, ) # type(int_tuple)的结果为tuple
元组主要用于线程的并发任务中
int_tuple = (1, 2, 3, 4, 5)
print(int_tuple[2]) # 3
也可以用for循环读取元组
元组的元素不可以修改指的是如果当前元组中的元素为不可变对象则不能修改,
如果对象是可变对象,在不修改元素类型的情况下,可以修改可变对象中的值。
可变对象:list、dict、set
不可变对象:tuple、string、int、float、bool
这些容器类型中的元素究竟是什么,其实就是一串内存地址。
python会对一些类型进行归类存储(如分别归类可变对象,不可变对象)
所以,只要用元组,就不要修改元素的值。
data = ({'a': 1}, [1, 2], 'abc', 3, 3.14)
data[0]['a'] = 2
data[1].append(3)
# data[2] = 'bcd' # 会报元组不可修改的错
print(data) # ({'a': 2}, [1, 2, 3], 'abc', 3, 3.14)
元组的方法
index返回索引(下标),count统计元素在元组中出现的次数
print(data.index('abc')) # 2
print(data.count(3)) # 1
元组不可以删除元组中的某一个元素,但可以删除整个元组变量
del data # 删除整个元组
6.集合(set)
int_set = {1, 1, 2, 3, 3, 5}
print(int_set) # {1, 2, 3, 5} # 无序
集合打印只能显示一次(不重复)
for item in int_set:
print(item) # 依次无序打印1,2,3,5
无法通过data_set = {} 创建一个空集合,因为会直接默认为字典类型
可以通过data_set = set()方法创建
集合的两个特性:无序,不重复
写入元素的顺序和打印元素的顺序不一致,因为位置无序,所以没有办法通过固定的索引下标进行取值,通过hash排序
集合的内置方法

int_set = {1, 2, 3, 3}
int_set.add(4) # {1, 2, 3, 4} # 集合不重复
# int_set.clear() # 打印结果set()
# int_set.pop() # 随机弹出一个数据
int_set.remove(2) # {1, 3, 4}
int_set.update((4, 5, 6)) # {1, 3, 4, 5, 6} 传入的元素可以是单个元素,也可以是集合,元组
int_set.update('abc') # {1, 3, 4, 5, 6, 'a', 'b', 'c'} # 字符串会被拆分
int_set.update({'name': 'AAA', 'age': 10}) # {1, 3, 4, 5, 6, 'a', 'b', 'c', 'name', 'age'} # 传入字典时,只能传key,无法传value
update可以传递 str、list、tuple、set、dict等
int_list = [1, 2, 3]
int_tuple = tuple(int_list) # 列表转元组
set(int_list) # 列表转集合
list(int_tuple) # 元组转列表
列表,集合,元组之间可以相互转换
7.疑问解答
可迭代对象
只要可以被for循环运行的对象,就是一个可迭代对象
如果for循环对一个变量进行遍历报错,那么这个对象一般就是不能迭代的对象
函数使用
如果一个函数没有加括号,则获取到的值就是一个函数的内存地址
如果一个函数名称后面加括号,则代表的是运行这个函数的代码
实例化
一个类在实例化的过程中所返回的对象
波浪线
这是python中的pep8规范,不遵守规范会有波浪线警示
# 单行注释在#后面需要加空格
num = 0 # 这是一个计数器
如果在代码的后面写注释,代码与#之间需要有两个空格的间隔
导包的情况下遵守规范,将import放到最前
声明函数也要遵守规定,同时声明多个函数,函数与函数之间需要空两行。同理,类与类之间也是空两行,多了也不行
代码语法优化方面问题
设置开头注释

快速格式化代码快捷键
苹果电脑:command + alt + L

浙公网安备 33010602011771号