python-04-列表 元组 set集合

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 判断失效或无法删除,强烈不推荐。记住:集合里的元素身份(引用)不能变,值最好也别动。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容