数据类型
七种
可变类型:列表[ ] 字典{} 集合 {}
不可变:数值 布尔 字符串 元组()
字符串
在计算机中python属于序列结构
假设字符串为"adc123"
索引下标 --从0开始
索引下标最大值 len(“adc123”)-1
列表字符串元组支持索引
切片:所谓的切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。(只顾头不顾尾)
序列名称[开始位置下标:结束位置下标:步长(步阶)]
切片例子:
numstr = '0123456789'
1、从2到5开始切片,步长为1
print(numstr[2:5:1])
print(numstr[2:5])
2、只有结尾的字符串切片:代表从索引为0开始,截取到索引为5的位置(不包含索引为5的数据)
print(numstr[:5])
3、只有开头的字符串切片:代表从起始位置开始,已知截取到字符串的结尾
print(numstr[1:])
4、获取或拷贝整个字符串
print(numstr[:])
5、调整步阶:类似求偶数
print(numstr[::2])
6、把步阶设置为负整数:类似字符串翻转
print(numstr[::-1])
7、起始位置与结束位置都是负数
print(numstr[-4:-1])
8、结束字符为负数,如截取012345678
print(numstr[:-1])
寻找字符串的某个子串(find&index)
定义一个字符串
str1 = 'hello world hello linux hello python'
查找linux子串是否出现在字符串中
print(str1.find('linux')) 返回的是18,空格也算
在str1中查找不存在的子串
print(str1.find('and')) 返回的是-1
使用input方法输入任意一个文件名称,求点号的索引下标
filename = input('请输入您要上传文件的名称:') 输入123.txt
获取点号的索引下标
index = filename.find('.')
print(index) 返回3
求文件名称
print(filename[:index]) 返回123
求文件后缀
print(filename[index:]) txt
字符串拼接(结合两者都用加号连起来不错)
需要注意的是,这种写法只能拼接字符串常量。
str1 = "Python教程" "http://c.biancheng.net/python/"
**print**(str1)
str2 = "[Java](http://c.biancheng.net/java/)" "Python" "[C++](http://c.biancheng.net/cplus/)" "[PHP](http://c.biancheng.net/php/)"
**print**(str2)
如果需要使用变量,就得借助+
运算符来拼接,具体格式为
name = "C++教程"
url = "http://c.biancheng.net/cplus/"
info = name + "的网址是:" + url
**print**(info)
replace 替换
split 切割---------并返回一个列表类型的数据
count 统计出现次数
列表(其他语言叫做数组)
列表可以一次存储多个数据且可以为不同的数据类型
列表在计算机中的底层存储形式,列表和字符串一样,在计算机内存中都占用一段连续的内存地址,我们想访问列表中的每个元素,都可以通过==“索引下标”==的方式进行获取。
增删改查
增
append 增加指定数据
extend 两个列表合并
insert 指定位置新增数据
names = ['孙悟空', '唐僧', '猪八戒']
在列表的尾部追加一个元素"沙僧"
names.append('沙僧')
打印列表
print(names)
list1 = ['Tom', 'Rose', 'Jack']
使用extend方法追加元素"Jennify"
names.extend("Jennify")
print(names)
建议:使用extend方法两个列表进行合并
list2 = ['Hack', 'Jennify']
list1.extend(list2)
print(list1)
names = ['薛宝钗', '林黛玉']
在薛宝钗和林黛玉之间,插入一个新元素"贾宝玉"
names.insert(1, '贾宝玉')
print(names)
删
编号 | 函数 | 作用 |
---|---|---|
1 | del 列表[索引] | 删除列表中的某个元素 |
2 | pop() | 删除指定下标的数据(默认为最后一个),并返回该数据 |
3 | remove() | 移除列表中某个数据的第一个匹配项。 |
☆ del删除指定的列表元素
基本语法:
names = ['Tom', 'Rose', 'Jack', 'Jennify']
# 删除Rose
del names[1]
# 打印列表
print(names)
☆ pop()方法
作用:删除指定下标的元素,如果不填写下标,默认删除最后一个。其返回结果:就是删除的这个元素
names = ['貂蝉', '吕布', '董卓']
del_name = names.pop()
# 或
# del_name = names.pop(1)
print(del_name)
print(names)
☆ remove()方法
作用:删除匹配的元素
fruit = ['apple', 'banana', 'pineapple']
fruit.remove('banana')
print(fruit)
改
编号 | 函数 | 作用 |
---|---|---|
1 | 列表[索引] = 修改后的值 | 修改列表中的某个元素 |
2 | reverse() | 将数据序列进行倒叙排列 |
3 | sort() | 对列表序列进行排序 |
list1 = ['貂蝉', '大乔', '小乔', '八戒']
# 修改列表中的元素
list1[3] = '周瑜'
print(list1)
list2 = [1, 2, 3, 4, 5, 6]
list2.reverse()
print(list2)
list3 = [10, 50, 20, 30, 1]
list3.sort() # 升序(从小到大)
# 或
# list3.sort(reverse=True) # 降序(从大到小)
print(list3)
查
查操作的相关方法:
编号 | 函数 | 作用 |
---|---|---|
1 | index() | 获取指定数据所在位置的下标 |
2 | count() | 统计指定数据在当前列表中出现的次数 |
3 | in | 判断指定数据在某个列表序列,如果在返回True,否则返回False |
4 | not in | 判断指定数据不在某个列表序列,如果不在返回True,否则返回False |
具体应用案例:
# 1、查找某个元素在列表中出现的位置(索引下标)
list1 = ['apple', 'banana', 'pineapple']
print(list1.index('apple')) # 0
# print(list1.index('peach')) # 报错
# 2、count()方法:统计元素在列表中出现的次数
list2 = ['刘备', '关羽', '张飞', '关羽', '赵云']
# 统计一下关羽这个元素在列表中出现的次数
print(list2.count('关羽'))
# 3、in方法和not in方法(黑名单系统)
list3 = ['192.168.1.15', '10.1.1.100', '172.35.46.128']
if '10.1.1.100' in list3:
print('黑名单IP,禁止访问')
else:
print('正常IP,访问站点信息')
元组
思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做?
答:列表?列表可以一次性存储多个数据,但是列表中的数据允许更改。
num_list = [10, 20, 30]
num_list[0] = 100
那这种情况下,我们想要存储多个数据且数据不允许更改,应该怎么办呢?
答:使用元组,元组可以存储多个数据且元组内的数据是不能修改的。
元组的定义
元组特点:定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。
基本语法:
# 多个数据元组
tuple1 = (10, 20, 30)
# 单个数据元组
tuple2 = (10,)
注意:如果定义的元组只有一个数据,那么这个数据后面也要添加逗号,否则数据类型为唯一的这个数据的数据类型。
tuple2 = (10)
print(type(tuple2))
输出类型为int
元组的相关操作方法
由于元组中的数据不允许直接修改,所以其操作方法大部分为查询方法。
编号 | 函数 | 作用 |
---|---|---|
1 | 元组[索引] | 根据索引下标查找元素 |
2 | index() | 查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index方法相同 |
3 | count() | 统计某个数据在当前元组出现的次数 |
4 | len() | 统计元组中数据的个数 |
案例1:访问元组中的某个元素
nums = (10, 20, 30)
print(nums[2])
案例2:查找某个元素在元组中出现的位置,存在则返回索引下标,不存在则直接报错
nums = (10, 20, 30)
print(nums.index(20))
案例3:统计某个元素在元组中出现的次数
nums = (10, 20, 30, 50, 30)
print(nums.count(30))
案例4:len()方法主要就是求数据序列的长度,字符串、列表、元组
nums = (10, 20, 30, 50, 30)
print(len(nums))
字典
思考2:在日常生活中,姓名、年龄以及性别同属于一个人的基本特征。但是如果使用列表对其进行存储,则分散为3个元素,这显然不合逻辑。我们有没有办法,将其保存在同一个元素中,姓名、年龄以及性别都作为这个元素的3个属性。
答:使用Python中的字典
定义:
# 有数据字典
dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
# 空字典
dict2 = {}
dict3 = dict()
在Python代码中,字典中的key必须使用引号引起来
字典的增操作(重点)
基本语法:
字典名称[key] = value
注:如果key存在则修改这个key对应的值;如果key不存在则新增此键值对。
案例:定义一个空字典,然后添加name、age以及address这样的3个key
# 1、定义一个空字典
person = {}
# 2、向字典中添加数据
person['name'] = '刘备'
person['age'] = 40
person['address'] = '蜀中'
# 3、使用print方法打印person字典
print(person)
注意:列表、字典为可变类型
字典的删操作
① del 字典名称[key]:删除指定元素
# 1、定义一个有数据的字典
person = {'name':'王大锤', 'age':28, 'gender':'male', 'address':'北京市海淀区'}
# 2、删除字典中的某个元素(如gender)
del person['gender']
# 3、打印字典
print(person)
② clear()方法:清空字典中的所有key
# 1、定义一个有数据的字典
person = {'name':'王大锤', 'age':28, 'gender':'male', 'address':'北京市海淀区'}
# 2、使用clear()方法清空字典
person.clear()
# 3、打印字典
print(person)
字典的改操作
基本语法:
字典名称[key] = value
注:如果key存在则修改这个key对应的值;如果key不存在则新增此键值对。
案例:定义一个字典,里面有name、age以及address,修改address这个key的value值
# 1、定义字典
person = {'name':'孙悟空', 'age': 600, 'address':'花果山'}
# 2、修改字典中的数据(address)
person['address'] = '东土大唐'
# 3、打印字典
print(person)
字典的查操作
① 查询方法:使用具体的某个key查询数据,如果未找到,则直接报错。
字典序列[key]
② 字典的相关查询方法
编号 | 函数 | 作用 |
---|---|---|
1 | keys() | 以列表返回一个字典所有的键 |
2 | values() | 以列表返回字典中的所有值 |
3 | items() | 以列表返回可遍历的(键, 值) 元组数据 |
4 | enumerate() | 把一个容器类型(如列表)的数据构改造成key:value结构 |
案例1:提取person字典中的所有key
# 1、定义一个字典
person = {'name':'貂蝉', 'age':18, 'mobile':'13765022249'}
# 2、提取字典中的name、age以及mobile属性
print(person.keys())
案例2:提取person字典中的所有value值
# 1、定义一个字典
person = {'name':'貂蝉', 'age':18, 'mobile':'13765022249'}
# 2、提取字典中的貂蝉、18以及13765022249号码
print(person.values())
案例3:使用items()方法提取数据
# 1、定义一个字典
person = {'name':'貂蝉', 'age':18, 'mobile':'13765022249'}
# 2、调用items方法获取数据,dict_items([('name', '貂蝉'), ('age', 18), ('mobile', '13765022249')])
# print(person.items())
# 3、结合for循环对字典中的数据进行遍历
for key, value in person.items():
print(f'{key}:{value}')
案例4:enumerate(),把一个容器类型(如列表)的数据构造成key:value结构
list1 = [10, 20, 30, 40, 50]
n = 1
for i in list1:
print(f'第{n}个数:{i}')
n += 1
print('-' * 40)
for key, value in enumerate(list1):
print(f'第{key+1}个数:{value}')
集合——天生去重
什么是集合
集合(set)是一个无序的不重复元素序列。
① 天生去重
② 无序
集合的定义
在Python中,我们可以使用一对花括号{}或者set()方法来定义集合,但是如果你定义的集合是一个空集合,则只能使用set()方法。
# 定义一个集合
s1 = {10, 20, 30, 40, 50}
print(s1)
print(type(s1))
# 定义一个集合:集合中存在相同的数据
s2 = {'刘备', '曹操', '孙权', '曹操'}
print(s2)
print(type(s1))
# 定义空集合
s3 = {}
s4 = set()
print(type(s3)) # <class 'dict'>
print(type(s4)) # <class 'set'>
集合操作的相关方法(增删查)
☆ 集合的增操作
add()方法:向集合中增加一个元素(单一)
students = set()
students.add('李哲')
students.add('刘毅')
print(students)
☆ 集合的删操作
remove()方法:删除集合中的指定数据,如果数据不存在则报错。
# 1、定义一个集合
products = {'萝卜', '白菜', '水蜜桃', '奥利奥', '西红柿', '凤梨'}
# 2、使用remove方法删除白菜这个元素
products.remove('白菜')
print(products)
☆ 集合中的查操作
① in :判断某个元素是否在集合中,如果在,则返回True,否则返回False
② not in :判断某个元素不在集合中,如果不在,则返回True,否则返回False
# 定义一个set集合
s1 = {'刘帅', '英标', '高源'}
# 判断刘帅是否在s1集合中
if '刘帅' in s1:
print('刘帅在s1集合中')
else:
print('刘帅没有出现在s1集合中')
③ 集合的遍历操作
for i in 集合:
print(i)