python08-数据类型-列表-字符串-字典-内置方法
今日学习
- 列表内置方法
- 字典内置方法
- 元组内置方法
- 集合内置方法
- 可变类型与不可变类型
列表的内置方法
列表的内置方法不会产生新的值,而是修改.
增删改查占据程序90%以上的核心操作
方法名称 | 用法 |
---|---|
append() | 该方法用于再列表末尾添加新的对象,无返回值,直接修改原列表 |
insert() | 用于将指定对象插入指定位置,无返回值,直接插入原列表 |
extend() | z在列表末尾追加一个序列中的值,必须是支持for循环的数据类型 |
del | 通用方法,删除操作,通过列表索引删除即可 |
remove() | 移除操作,指定数据,进行删除,遇见重复数据,只删除第一个 |
pop() | 删除指定索引位置并返回索引位置的元素,如果不确定,括号内不填写,默认删除最后一个 |
clear() | 清空整个列表 |
count() | 统计某个数值出现的次数 |
sort() | 排序 默认升序 |
index() | 查看列表元素中的索引位置 |
-
append
l1 = ['jason', 'kevin', 'oscar', 'tony', 'jerry'] res = l1.append('owen') print(res,l1) None ['jason', 'kevin', 'oscar', 'tony', 'jerry', 'owen']
-
insert
l1.insert(0, '插队') print(l1) ['插队', 'jason', 'kevin', 'oscar', 'tony', 'jerry'] ----------------#扩展列表---------------------------------- new_l1 = [11, 22, 33, 44, 55] new_l2 = [1, 2, 3] # [1, 2, 3, 11, 22, 33, 44, 55] #第一种方法 for i in new_l1: new_l2.append(i) print(new_l2) #第二种 print(new_l2+new_l1) #第三种 new_l1.extend(new_l2) # 括号里面必须是支持for循环的数据类型 for循环+append() print(new_l1) -----------------结果-------------------- [1, 2, 3, 11, 22, 33, 44, 55]
-
del
new_l1 = [11, 11, 22, 33, 44, 55] new_l2 = [1, 2, 3] # [1, 2, 3, 11, 22, 33, 44, 55] ###删除操作del del new_l1[0] print(new_l1) -------结果----------- [11, 22, 33, 44, 55]
-
remove
new_l1 = [11, 11, 22, 33, 44, 55] new_l1.remove(11) #移除11,当遇见重复数据时只移除第一个 print(new_l1) -------------结果------------- [11, 22, 33, 44, 55]
-
pop
new_l1 = [11, 11, 22, 33, 44, 55] rep = new_l1.pop(0) print(rep,new_l1) [11, 22, 33, 44, 55]
-
clear
new_l1 = [11, 11, 22, 33, 44, 55] new_l1.clear() print(new_l1) ----------结果----------- []
-
count
new_l1 = [11, 11, 22, 33, 44, 55] # count 统计数据 print(new_l1.count(11)) ----------结果--------------- 2
-
sort
new_l2 = [2, 1, 3, 6, 5] new_l2.sort() #升序 new_l2.sort(reverse=True) #降序 print(new_l2) ----------结果--------------- [6, 5, 3, 2, 1]
-
index
new_l2 = [2, 1, 3, 6, 5] print(new_l2.index(2)) -----执行结果------------ 0
可变与不可变类型
为什么字符串调用内置方法是产生新的值 列表调用内置方法是改变自身
new_l2 = [2, 1, 3, 6, 5]
print(id(new_l2))
new_l2.append(10)
print(id(new_l2), new_l2)
--------------执行结果------------------
2282054340160 #值改变,内存地址可以不变
2282054340160 [2, 1, 3, 6, 5, 10]
--------------------- ---
2.不可变类型 str int float
值改变(内置方法) 内存地址肯定变
s1 = '$hello$'
print(id(s1))
s1 = s1.strip('$')
print(id(s1))
ccc = 666
print(id(ccc))
ccc = 990
print(id(ccc))
----------执行结果-----------------
1362889995824
1362896842224
1362895411856
1362895411632
元组内置方法tuple
tuple与list列表类似,同样可以保存多个任意类型的元素,但是与list的不同之处,tuple的元素不能修改,元组相当于不可改变的列表,用于记录多个固定不允许修改的值,单纯取数据
-
类型转换
支持for循环的数据类型都可以转给元组
t1 = () # tuple print(type(t1)) t2 = (1) # int print(type(t2)) t3 = (11.11) # float print(type(t3)) t4 = ('jason') # str print(type(t4))
#int t1 = (1) # tuple print(type(t1)) --------------------结果------------- <class 'int'> #元组 t1 = (1,) # tuple print(type(t1)) ----------------结果------------------ <class 'int'> 总结: 当元组内只有一个数据值的时候 逗号不能省略 如果省略了 那么括号里面是什么数据类型就是什么数据类型 建议:编写元组 逗号加上 哪怕只有一个数据 (111, ) ('jason', ) ps:以后遇到可以存储多个数据值的数据类型 如果里面只有一个数据 逗号也趁机加上
只可以查询
# t1 = (11, 22, 33, 44, 55, 66) # 1.索引相关操作 # 2.统计元组内数据值的个数 # print(len(t1)) # 3.查与改 # print(t1[0]) # 可以查 # t1[0] = 222 # 不可以改 """元组的索引不能改变绑定的地址""" # t1 = (11, 22, 33, [11, 22]) # t1[-1].append(33) # print(t1) # (11, 22, 33, [11, 22, 33])
字典内置方法dict
# 类型转换(了解即可)
# print(dict([('name', 'jason'), ('pwd', 123)]))
# print(dict(name='jason', pwd=123))
'''字典很少涉及到类型转换 都是直接定义使用'''
info = {
'username': 'jason',
'pwd': 123,
'hobby': ['read', 'run']
}
"""
K是对V的描述性性质的信息一般是字符串 K其实只要是不可变类型都可以
"""
# 1.字典内k:v键值对是无序的
# 2.取值操作
# print(info['username']) # 不推荐使用 键不存在会直接报错
# print(info['xxx']) # 不推荐使用 键不存在会直接报错,用get取值
#############################################################
--------------------------正确取值---------------------------------------------
# print(info.get('username')) # jason
# print(info.get('xxx')) # None
# print(info.get('username', '键不存在返回的值 默认返回None')) # jason
# print(info.get('xxx', '键不存在返回的值 默认返回None')) # 元素不存在,做自定义 键不存在返回的值 默认返回None
# print(info.get('xxx', 123)) # 123
# print(info.get('xxx')) # None
---------------------- 3.统计字典中键值对的个数-----------------------------
# print(len(info))
# 4.修改数据
# info['username'] = 'jasonNB' 键存在则是修改
# print(info)
---结果----
{'username': 'jasonNB', 'pwd': 123, 'hobby': ['read', 'run']}
------------------------新增数据------------------------------------------
# 5.新增数据
info['salary'] = 6 键不存在则是新增
info['class'] = 3
print(info) # {'username': 'jason', 'pwd': 123, 'hobby': ['read', 'run'], 'salary': 6}
---------结果--------------
{'username': 'jason', 'pwd': 123, 'hobby': ['read', 'run'], 'salary': 6, 'class': 3}
----------------------删除数据-----------------------------------------------
# 方式1
# del info['username']
# print(info)
--------结果--------------
{'pwd': 123, 'hobby': ['read', 'run']}
# 方式2
res = info.pop('username')
print(info, res)
--------结果--------------
{'pwd': 123, 'hobby': ['read', 'run']} jason
# 方式3
info.popitem() # 随机删除
print(info)
--------结果--------------
{'username': 'jason', 'pwd': 123}
# 7.快速获取键 值 键值对数据
print(info.keys()) # 获取字典所有的k值 结果当成是列表即可
--------结果------------------------
dict_keys(['username', 'pwd', 'hobby'])
print(info.values()) # 获取字典所有的v值 结果当成是列表即可
--------结果------------------------
dict_values(['jason', 123, ['read', 'run']])
print(info.items()) # 获取字典kv键值对数据 组织成列表套元组
--------结果------------------------
dict_items([('username', 'jason'), ('pwd', 123), ('hobby', ['read', 'run'])])
-------------------# 8.修改字典数据 键存在则是修改 键不存在则是新增---------------------
info.update({'username':'jason123'})
print(info)
info.update({'xxx':'jason123'})
print(info)
-----------------# 9.快速构造字典 给的值默认情况下所有的键都用一个值----------------------
res = dict.fromkeys([1, 2, 3], None)
print(res)
--------结果------------------------
{1: None, 2: None, 3: None}
例子2:
new_dict = dict.fromkeys(['name', 'pwd', 'hobby'], []) # {'name': [], 'pwd': [], 'hobby': []}
#ew_dict['name'] = []
new_dict['name'].append(123)
new_dict['pwd'].append(123)
new_dict['hobby'].append('read')
print(new_dict)
------------结果----------------------------
{'name': ['jason', 123, 'read'], 'pwd': ['jason', 123, 'read'], 'hobby': ['jason', 123, 'read']}
# res = dict.fromkeys([1, 2, 3], 234234234234234234234)
# print(id(res[1]))
# print(id(res[2]))
# print(id(res[3]))
# 10.键存在则获取键对应的值 键不存在则设置 并返回设置的新值
res = info.setdefault('username', 'jasonNB')
print(res, info)
res1 = info.setdefault('xxx', 'jasonNB')
print(res1, info)
集合内置方法set
- 类型转换
支持for循环的 并且数据必须是不可变类型
主要用于去重和关系运算
'''去重'''
# s1 = {1, 2, 12, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 4, 5, 4, 5, 4}
# print(s1) # {1, 2, 3, 4, 5, 12}
----------------------#去重操作------------------------------------
# l1 = ['jason', 'jason', 'tony', 'oscar', 'tony', 'oscar', 'jason']
# s2 = set(l1)
# l1 = list(s2)
# print(l1)
'''关系运算'''
# print({1,2,[1,2,3]})
# print({1,2,{'name':'jason'}})
s1 = {1, 2, 12, 3, 2, 3, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 4, 5, 4, 5, 4}
print(s1)
{1, 2, 3, 4, 5, 12}
l1 = ['jason', 'jason', 'tony', 'oscar', 'tony', 'oscar', 'jason']
s2 = set(l1)
l1 = list(s2)
print(l1)
['tony', 'oscar', 'jason']
# 模拟两个人的好友集合
f1 = {'jason', 'tony', 'oscar', 'jerry'}
f2 = {'kevin', 'jerry', 'jason', 'lili'}
# 1.求f1和f2的共同好友
# print(f1 & f2) # {'jason', 'jerry'}
# 2.求f1/f2独有好友
# print(f1 - f2) # {'oscar', 'tony'}
# print(f2 - f1) # {'lili', 'kevin'}
# 3.求f1和f2所有的好友
# print(f1 | f2) # {'jason', 'kevin', 'lili', 'oscar', 'jerry', 'tony'}
# 4.求f1和f2各自独有的好友(排除共同好友)
# print(f1 ^ f2) # {'kevin', 'lili', 'tony', 'oscar'}
# 5.父集 子集
# s1 = {1, 2, 3, 4, 5, 6, 7}
# s2 = {3, 2, 1}
# print(s1 > s2) # s1是否是s2的父集 s2是不是s1的子集
# print(s1 < s2)