list = ["zhangsan", "lisi"]
列表页是可迭代对象 可以for循环取值
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
print(fruit)
-----------------------------------------------------
苹果
香蕉
橘子
列表操作
添加元素
li = ["one", "two"]
li.append("three") # 整体追加
li.extend("four") # 分散后逐个添加,这里必须要是可迭代对象 string可以但是number就不行了
print(li)
-----------------------------------
['one', 'two', 'three', 'f', 'o', 'u', 'r']
================================================
li.insert(3, "four") # 指定下标添加,如果下标原来有值 则原来的值整体后移
------------------------------------------------------
['one', 'two', 'three', 'four', 'f', 'o', 'u', 'r']
================================================
li.insert(100, "zero") # 超过的下标 还是在最后
---------------------------------------------------
['one', 'two', 'three', 'four', 'f', 'o', 'u', 'r', 'zero']
修改
fruits = ["苹果", "香蕉", "橘子"]
fruits[1] = "榴莲"
print(fruits) # 输出:['苹果', '榴莲', '橘子']
删除
li = ["a","b","c","d"]
li.pop() # 默认删除最后一个元素
print(li)
li.pop(1) # 下标删除
print(li)
li.remove('c') # 删除某个元素 默认只删除第一个找到的匹配对象
----------------------------------
['a', 'b', 'c']
['a', 'c']
['a']
排序
li = [1,5,7,8,2,4,3]
li.sort() # 从小到大
print(li)
------------------------------------
[1, 2, 3, 4, 5, 7, 8]
===========================
li = [1,5,7,8,2,4,3]
li.reverse() # 倒序
print(li)
------------------------------------
[3, 4, 2, 8, 7, 5, 1]
元组
格式:tua = (1,2,3) 元组中只有一个元素的时候后面要加一个逗号
元组中可以存放不同类型的元素,元组中也有下标,从左往右从0开始 右往左 -1开始
元组与列表的区别
- 元组只支持查询操作,不支持增删改操作
tua = (1,2,3, "hhh", ["a","b"])
print(type(tua))
----------------------------------
<class 'tuple'>
===============================
tua = (1,) # 只有一个元素的时候后面要加逗号
tub = (1) # 不加逗号只是元素的原始类型
tuc = ("a")
print(type(tua))
print(type(tub))
print(type(tuc))
-------------------------------------------------
<class 'tuple'>
<class 'int'>
<class 'str'>
格式化输出的value 本质上就是一个元组
name = "zhangsan"
age = 18
print("%s的年龄是%d", (name, age))
info = (name, age)
print(type(info))
print("%s的年龄是%d", info)
-------------------------------------------------
%s的年龄是%d ('zhangsan', 18)
<class 'tuple'>
%s的年龄是%d ('zhangsan', 18)
元组的应用场景
1、函数的参数和返回值
2、格式化输出
3、当数据不需要修改的时候 保护数据安全可以用元组来声明而不用list
字典
字典的格式:dic = {'name' : 'zhangsan', 'age' : 18}
键值对的形式保存,键具有唯一性,重复键名后面的值会覆盖前面的值
dic = {'name' : 'zhangsan', 'age' : 18}
print(type(dic))
-------------------------------------------------
<class 'dict'>
字典的常规操作
dic = {'name' : 'zhangsan', 'age' : 18}
print(dic['name'])
print(dic.get('age'))
print(dic.get('six')) # 不存在的键不会报错 返回none
print(dic.get('six', 'six 不存在')) # 可以设置不存在的默认返回值
print(dic['six']) # 不存在的键会报错 因为这种形式本质上是以下标的形式取值
---------------------------------------------
zhangsan
18
None
six 不存在
Traceback (most recent call last):
File "D:\python_project\pyTest\py01.py", line 5, in <module>
print(dic['six'])
~~~^^^^^^^
KeyError: 'six'
修改
dic = {'name' : 'zhangsan', 'age' : 18}
dic['age'] = 20 # 可以使用key来修改
dic.update({'name' : 'lisi'}) # 也可以使用键值对去替换
dic['score'] = 89 # 如果不存在则会添加入字典
dic.update({'tel' : '1234567'})
print(dic)
print(dic['name'])
print(dic.get('age'))
---------------------------------------------
{'name': 'lisi', 'age': 20, 'score': 89, 'tel': '1234567'}
lisi
20
增加
dic = {'name' : 'zhangsan', 'age' : 18}
dic['score'] = 89 # 如果不存在则会添加入字典
dic.update({'tel' : '1234567'}) # 如果不存在则会添加入字典
dic.setdefault('name', 'lisi') # 如果key存在则不添加也不修改
dic.setdefault('six', '男') # 如果key不存在则添加
print(dic)
-----------------------------------------------------------------------
{'name': 'zhangsan', 'age': 18, 'score': 89, 'tel': '1234567', 'six': '男'}
删除
dic ={'name': 'zhangsan', 'age': 18, 'score': 89, 'tel': '1234567', 'six': '男'}
del dic['age'] # 不存在会报错 因为本质是下标操作的逻辑
print(dic)
score= dic.pop('score') # 删除字典并返回 字典值 不存在的key报错
print(score) # 89
print(dic)
item = dic.popitem() # 删除并返回字典中的最后一个键值对
print(item)
print(dic)
dic.clear() # 清空整个字典 但保留字典对象
print(dic)
-------------------------------------------------------------------------
{'name': 'zhangsan', 'score': 89, 'tel': '1234567', 'six': '男'}
89
{'name': 'zhangsan', 'tel': '1234567', 'six': '男'}
('six', '男')
{'name': 'zhangsan', 'tel': '1234567'}
{}
其他方法
dic ={'name': 'zhangsan', 'age': 18, 'score': 89, 'tel': '1234567', 'six': '男'}
print(dic.keys()) # 字典的所有key
print(dic.values()) # 字典的所有value
print(len(dic)) # 字典长度
print(dic.items()) # 以元组的形式返回字典里所有的键值对
for i in dic.items():
print(i, type(i))
------------------------------------------------------------
dict_keys(['name', 'age', 'score', 'tel', 'six'])
dict_values(['zhangsan', 18, 89, '1234567', '男'])
5
dict_items([('name', 'zhangsan'), ('age', 18), ('score', 89), ('tel', '1234567'), ('six', '男')])
('name', 'zhangsan') <class 'tuple'>
('age', 18) <class 'tuple'>
('score', 89) <class 'tuple'>
('tel', '1234567') <class 'tuple'>
('six', '男') <class 'tuple'>
set集合
格式:s1 = {1,2,3}
值得注意的是 s1 = {} 这里s1是空字典,空集合的生成方式是:s1 = set()
s1 = {1,2,3,4,5,6,7} # set中的数字顺序不会变,因为python中int的hash值是它本身
print(s1)
s2 = {'a', 'b', 'c', 'd', 'e'} # set中字符串的hash是不固定的 每次都变所以是无序的
print(s2)
--------------------------------------------------
{1, 2, 3, 4, 5, 6, 7}
{'d', 'c', 'b', 'e', 'a'}
集合的元素必须是不可变(可哈希)类型(如数字、字符串、元组),修改它们通常会生成一个新对象,而不是在原址上改变。
集合无序且没有索引,所以你无法定位“把第几个元素改成什么”。
如果想“改”某个元素(比如把集合里的 2 换成 4),标准做法是删除旧的,加入新的:
s = {1, 2, 3}
print(s) # {1, 2, 3}
# 想把 2 改为 4
s.remove(2) # 删除旧元素
s.add(4) # 添加新元素
s.update([ 5 , 6 ]) # update会把传入的元素拆分,一个一个添加进去,且传入的元素必须是可迭代的对象
s.update(( 7 , 8 )) # 元组也可迭代 添加7 和 8
s.update("789") # 会添加 '7', '8' '9'
s.update(9) # 直接传数字会报错因为数字不是一个可迭代对象
s.update({'a' : 18}) # 字典也是可迭代的对象 但字典默认迭代的是keys 所以只能加进去a 而加不进去18
print(s) # {1, 3, 4}
================================
#为了更安全(防止键不存在报错),通常结合 discard() 和 add() 使用:
s.discard(2) # 存在就删,不存在也不报错
s.add(4)
======================================
s.pop() # 对set无序排序 删除排序后的左边第一个
如果集合里存的是自定义类的实例对象,虽然这些对象是可哈希的,但可以修改对象的内部属性,而集合本身不会察觉到变化。
这里有个坑就是会破坏集合的内部哈希结构,导致 in 判断失效或无法删除,强烈不推荐。记住:集合里的元素身份(引用)不能变,值最好也别动。