Python基础-列表元组集合字典

Python介绍:

  • Python是一种解释型,面向对象,动态数据类型的高级程序设计语言.也是目前最受欢迎的编程语言之一;
  • 目前主流的Python版本有两大分类:
  1. 2.x,很多公司依然在用2.7版本,但Python官方在2020年将停止对Python 2的支持;
  2. 3.x,功能更加强大并且修复了很多2版本中不合适之处(推荐使用)
js 复制代码
Python 2.x版本:
             Python 2.5是不兼容3.0功能对的最后一个版本
             Python 2.6是一个过渡版本,使用了Python 2.x的语法和库,同时允许使用部分Python 3.0的语法与函数;
             Python2.7是2.x的最后一个版本,除了支持Python 2.x语法外,还支持Python 3.1语法
js 复制代码
Python 3.x版本:
              Python的3.0版本,常被称为Python 3000 或简称Py3K,在设计的时候没有考虑向下兼容问题;

Python的安装与环境配置:

  • 准备Python的安装包 (安装Python的服务)
  • 下载Pycharm的安装包(安装代码编辑器)
js 复制代码
1.安装Python环境:
1-1:下载:
        打开官网: http://www.python.org,点击Downloads下载,
        
1-2:安装:
        傻瓜式安装;
1-3:写代码:
        (1)首次使用必要配置
        (2)写代码&运行
1-4:设置Python配置信息:

Python的基本语法:

  • 输出语句
js 复制代码
print("hello world")  # print 默认换行显示;
print("hello world", end="")  # 可以给一个参数, end="", 即可不换行显示; 
原因: print这个方法中已经封装过了 end="\n" 换行封装完毕; 

list列表定义操作与方法:

js 复制代码
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
与字符串的索引一样,列表索引也是从0开始;
js 复制代码
使用下标索引来访问列表中的值:
list1 = ['physics', 'chemistry', 1997, 2000]  
list2 = [1, 2, 3, 4, 5, 6, 7]  
  
print(list1[1]) #chemistry  
print(list2[1::2]) #[2, 4, 6] 从下标1开始截取,截取到最后,步长为2

增加数据:

  1. 列表名.append(要增加的值) #末尾追加,在原列表中尾部追加值,每次只能追加一个值
js 复制代码
list1 = ['physics', 'chemistry', 1997, 2000]
list1.append("永远18岁")  
print(list1) #['physics', 'chemistry', 1997, 2000, '永远18岁']

2.列表名.insert(索引值,插入的数据)#插入,在原列表的指定索引位置插入值

js 复制代码
list2 = [1, 2, 3, 4, 5, 6, 7]
list2.insert(1,"天天开心")  
print(list2) #[1, '天天开心', 2, 3, 4, 5, 6, 7]

3.列表名.extend(要添加的列表) #扩展,将一个列表中的元素添加到另一个列表

scss 复制代码
list1=[1,2,3]  
list2=[4,5,6]  
list1.extend(list2)  
print(list1)#[1, 2, 3, 4, 5, 6]
  • 特点:在原来的列表上进行修改,该方法无返回值,但是会修改原来的列表

删除数据:

  1. 列表名.remove(要删除的value值) #在原列表中根据value值删除,(如果有重复的话,从左到右依次删除)
js 复制代码
list1 = ['physics', 'chemistry', 1997, 2000]  
list1.remove('chemistry')  
print(list1)#['physics', 1997, 2000]
  1. 列表名.pop(索引值) #如果不加索引值,默认删除最后一个
js 复制代码
#有索引值:
list1 = ['physics', 'chemistry', 1997, 2000]
list1.pop(0)  
print(list1)#['chemistry', 1997, 2000]

#没有索引值:
list1 = ['physics', 'chemistry', 1997, 2000]
list1.pop()  
print(list1)#['physics', 'chemistry', 1997]
  1. del 列表名[索引值] #根据索引值删除元素
js 复制代码
list1 = ['physics', 'chemistry', 1997, 2000]
del list1[2]  
print(list1)#['physics', 'chemistry', 2000]
  1. 列表名.clear() #清空原列表

修改数据: 列表名[下标]=要修改的值

js 复制代码
list1 = ['physics', 'chemistry', 1997, 2000]
list1[1]="北京"  
print(list1)#['physics', '北京', 1997, 2000]

Python列表脚本操作符

Python 表达式 结果 描述
len([1, 2, 3]) 3 长度
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复
3 in [1, 2, 3] True 元素是否存在于列表中
for x in [1, 2, 3]: print x, 1 2 3 迭代

列表相关方法:

js 复制代码
# [list.count(obj)]元素在列表中出现的次数  
list1 = ['physics', 'chemistry', 2000,'chemistry',1999,'chemistry'] 
print(list1.count('chemistry')) #3



# [list.index(obj)]从列表中找出某个值第一个匹配项的索引位置  
list1 = ['physics', 'chemistry', 2000,'chemistry',1999]
int(list1.index('chemistrypr'))#1


[list.sort(cmp=None, key=None, reverse=False)]对原列表进行排序  
list1 =[1,4,6,10,9,2,3]  
# 基础排序  
list1.sort()  
print(list1) #[1, 2, 3, 4, 6, 9, 10]  
  
也就是说默认是升序  
list1.sort(reverse=False)  
print(list1)#[1, 2, 3, 4, 6, 9, 10]  

# 降序排序  
list1.sort(reverse=True)  
print(list1)#[10, 9, 6, 4, 3, 2, 1]

元组定义操作与访问:

Python 的元组与列表类似,不同之处在于元组的元素不能修改

元组的创建:

js 复制代码
tup1 = ('physics', 'chemistry', 1997, 2000) 
tup2 = (1, 2, 3, 4, 5 ) 

#创建空元组
tup1 =()

#元组中只包含一个元素时,需要在元素后面添加逗号
tup2 =(2,)

元组的访问

js 复制代码
使用下标索引来访问元组中的值:
tup1=[1,2,3,4,5,6,7]  
tup2=["北京","工作","美食"]  
print(tup1[1:5])#[2, 3, 4, 5]
print(tup2[1])#工作  

元组的修改

js 复制代码
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合
tup1=[1,2,3,4,5,6,7]  
tup2=["北京","工作","美食"] 
tup3=tup1+tup2  
print(tup3)#[1, 2, 3, 4, 5, 6, 7, '北京', '工作', '美食']

无关闭分隔符

bash 复制代码
在Python中,只要用逗号分隔多个值,即使没有括号,也会自动创建一个元组
x = 1, 2, 3
print(type(x))  # <class 'tuple'>
print(x)        # (1, 2, 3)

元组的内置函数

js 复制代码
tup1 = [1,2,3,4,5,6,7,11]
list1 = [11,22,33]

# 计算元组元素个数  
print(len(tup1)) #8  
# 返回元组中元素最大值  
print(max(tup1)) #11  
# 返回元组中元素最小值  
print(min(tup1)) #1  
# 将列表转换为元组  
print(tuple(list1)) #(11, 22, 33)

集合的创建与运算

集合是 Python 中无序、可变、元素唯一 的数据结构,用花括号 {}set() 创建

集合的创建

js 复制代码
# 创建空集合(注意:{}表示空字典)  
s1 =set() #空集合  
  
# 直接创建  
s2 ={1,2,3}  
print(s2)#{1, 2, 3}  
print(type(s2)) #<class 'set'>

# 类型转换  
s3 = set([1,2,3,3,4]) #{1, 2, 3, 4} 自动去重  
print(s3)  
s4 = set("hello")  
print(s4)#{'l', 'e', 'o', 'h'}

集合的添加与删除操作

js 复制代码
#添加元素:add、 updata 
s = {1,2,3,4,3,5}  
# 添加单个元素  
s.add(8)  
print(s) #{1, 2, 3, 4, 5, 8}  

# 添加多个值  
s2 = {1,2,3,4,3,5}  
s2.update([9,10])  
print(s2) #{1, 2, 3, 4, 5, 9, 10}
js 复制代码
# 删除元素:pop 、remove、 clear、 discard
s = {1,2,3,4,3,5}  
# s.remove(1)  
print(s) #{2, 3, 4, 5}  
# s.remove(10)  
print(s) #要删除的数据不存在则会报错:KeyError:  
  
# 随机删除并返回一个元素  
s.pop()  
print(s)  
s.discard(10)  
print(s) #要删除的数据不存在也不会报错,返回元集合  
s.discard(2)  
print(s) #{1, 3, 4, 5}  
s.clear()  
print(s) #set()

集合的运算

js 复制代码
A = {1, 2, 3, 4, 5}  
B = {4, 5, 6, 7, 8}  
  
# 交集  
print(A & B) #{4, 5}  
print(A.intersection(B)) #{4, 5}  
# 并集  
print(A | B) #{1, 2, 3, 4, 5, 6, 7, 8}  
print(A.union(B))  
# 差集 (A有B没有)  
print(A - B) #{1, 2, 3}  
print(A.difference(B))  
# 对称差集  
print(A ^ B) #{1, 2, 3, 6, 7, 8}  
print(A.symmetric_difference(B))

集合使用最多的场景:

ini 复制代码
# 1. 列表去重
nums = [1, 2, 2, 3, 3, 3, 4]
unique = list(set(nums))  # [1, 2, 3, 4]

# 2. 查找共同元素
user1_likes = {"Python", "Java", "C++"}
user2_likes = {"Python", "JavaScript", "Go"}
common = user1_likes & user2_likes  # {'Python'}

# 3. 数据差异检测
old_data = {101, 102, 103, 104}
new_data = {102, 103, 104, 105}
added = new_data - old_data    # 新增:{105}
removed = old_data - new_data   # 删除:{101}

# 4. 消除重复字符
string = "abracadabra"
unique_chars = ''.join(set(string))  # 'acbdr'(顺序不保证)

字典定义操作与方法:

字典是 Python 中无序可变键值对(key-value) 存储的数据结构,通过键来访问值,键key必须是不可变类型(如字符串、数字、元组)

字典的创建

js 复制代码
# 创建空字典:  
dict1 ={}  
print(type(dict1)) #<class 'dict'>

# 创建  
dict2 ={"name":"世界首富女士","age":18,"add":"北京"}

访问字典里的值

js 复制代码
dict1 ={"name":"世界首富女士","age":18,"add":"北京"}  
# 访问字典里的值:  
print(dict1["name"]) #世界首富女士  
#如果用字典里没有的键访问数据,会报错
print(dict1["pho"]) #KeyError: 'pho'
js 复制代码
#添加数据 -末位添加
dict1 ={"name":"世界首富女士","age":18,"add":"北京"}
dict1["pho"]="123456"  
print(dict1) #{'name': '世界首富女士', 'age': 18, 'add': '北京', 'pho': '123456'}
js 复制代码
更新数据:
dict1 ={"name":"世界首富女士","age":18,"add":"北京"}
dict1["name"]="哈佛"  
print(dict1)#{'name': '哈佛', 'age': 18, 'add': '北京', 'pho': '123456'}
js 复制代码
删除操作:
dict1 ={"name":"世界首富女士","age":18,"add":"北京"}
# 删除指定的键及对应的值  
del dict1["name"]  
print(dict1)#{'age': 18, 'add': '北京', 'pho': '123456'}

# 末位删除并返回最后剩余的键值对  
dict6 ={"school":"21世纪中学","name":"xiao","pho":"18700124566","add":"青岛"}  
dict6.popitem()  
print(dict6) #{'school': '21世纪中学', 'name': 'xiao', 'pho': '18700124566'}

# 删除整个字典:
dict1 ={"name":"世界首富女士","age":18,"add":"北京"}
del dict1  
print(dict1) #name 'dict1' is not defined

#清空字典  
dict1.clear()  
print(dict1) #{}

字典的特性

js 复制代码
字典的特性1:不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会把前一个值覆盖  
dict1 ={"name":"世界首富女士","age":18,"add":"北京","name":"豆包"}  
print(dict1["name"]) #豆包  
  
字典的特性2:键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行  
#键是列表:
dict1 ={["name"]:"世界首富女士","age":18,"add":"北京"}  
print(dict1) #TypeError: unhashable type: 'list'
#键是数字:
dict2 ={11:"世界首付女士","age":18,"add":"北京"}  
print(dict2[11]) #世界首付女士  
#键是元组:
dict3 ={11:"世界首付女士",(""):18,"add":"北京"}  
print(dict3[("")]) #18

常用的方法:

js 复制代码
dict1 = {"name":"世界首富女士","age":18,"add":"北京"}  
dict2 = {"school":"上海交通","birth":"农历初一"}

# 获取所有的键 --字典名.keys()
k = dict1.keys()  
print(k) #dict_keys(['name', 'age', 'add'])  

# 获取所有的值 --字典名.values()
v = dict1.values()  
print(v) #dict_values(['世界首富女士', 18, '北京'])  

# 获取所有的键值对  --字典名.item()
item =dict1.items()  
print(item) #dict_items([('name', '世界首富女士'), ('age', 18), ('add', '北京')])  

# 合并字典、更新字典、覆盖现有字典、添加新键 
dict1.update({"work":"护士"})  
print(dict1) #{'name': '世界首富女士', 'age': 18, 'add': '北京', 'work': '护士'}  

获取指定键的值,如果键不存在则设置默认值并返回--字典名.setdefault(key, default_value)
# 如果键存在:返回该键对应的值,不修改字典
vv = dict1.setdefault("name")  
print(vv) #世界首富女士  
# 如果键不存在:将键和默认值添加到字典中,并返回默认值
dict1.setdefault("age1",18)  
print(dict1)#{'name': '世界首富女士', 'age': 18, 'add': '北京', 'work': '护士', 'age1': 18}

python的条件语句:

if语句

js 复制代码
# 基本if
if 条件:
    # 代码块
    
# if语句  
a = input("请输入一个数字:")  
a = int(a)  
if a >=10:  
print("该数值大于0:")
#解析:如果 输入的值a大于等于10,则输出:该数值大于0
js 复制代码
# if-else
if condition:
    # 条件为真时执行
else:
    # 条件为假时执行

#示例:
a = input("请输入一个数字:")  
a = int(a)  
if a >=10:  
print("该数值大于10:")  
else:  
print("该数值小于10:")  
print("条件输出结束")  
  
"""  
输出结果:
请输入一个数字:14  
该数值大于10:  
条件输出结束  
  
请输入一个数字:9  
该数值小于10:  
条件输出结束  
"""
js 复制代码
# if-elif-else
if condition1:
    # 条件1为真
elif condition2:
    # 条件2为真
else:
    # 所有条件都为假
    
#示例:
# 学生成绩: 大于=90分的为A ;大于=80分的为B 大于=75的为C 小于75的为D  
a1 = input("请输入该学生的本次成绩:")  
a1 = int(a1)  
  
if a1 >= 90:  
print("该学生的成绩为A")  
elif a1 >= 80:  
print("该学生的成绩为B")  
elif a1>=75:  
print("该学生的成绩为C")  
else:  
print("该学生的成绩为D")

python的循环语句: while循环语句

js 复制代码
基本语法:
while 条件表达式  
循环体语句

#示例:
num = 1  
while num <= 6:  
print(f"第{num}次输出")  
num +=1  
print(num)
js 复制代码
break --跳出整个循环
num1 =1  
while num1 <=100:  
if num1 % 7 == 0:  
print(f"这个数可以被7整除:{num1}")  
break  
num1 +=1
js 复制代码
# countion --跳出本次循环  
# 打印-1到10所有的奇数  
i =0  
while i<10:  
i +=1  
if i % 2== 0:  
continue #  
print(i)

for循环

js 复制代码
#基础语法:
for 变量 in 可迭代对象  
循环体语句  
特点:自动遍历序列中的每个元素,不需要手动维护索引和循环条件
js 复制代码
# 示例: 遍历一个字符串  
for char in "python":  
print(char,end="-") #p-y-t-h-o-n-

# 示例:遍历元组:  
tuple1 =("红", "绿", "蓝")  
for tuple1s in tuple1:  
print(tuple1s)# "红", "绿", "蓝"

# 示例:遍历列表  
list1 =["苹果", "香蕉", "橙子", "葡萄"]  
for lists in list1:  
print(f"我喜欢吃{lists}") #我喜欢吃香蕉

# 示例:遍历键  
person = {"name": "张三", "age": 25, "city": "北京"}  
for key in person:  
print(f"{key}") 

# 示例:遍历值  
for value in person.values():  
print(f"{value}")

# 示例:遍历键值对  
for key,value in person.items():  
print(f"{key}:{value}")
相关推荐
学代码的真由酱2 天前
美团2023校招测试-简答题(第1/2批)
笔试·测试·美团·美团笔试·美团测试
学代码的真由酱2 天前
2023年美团秋招编程岗第二批笔试
测试·美团·笔试题·美团笔试·美团测试
哈哈哈哈~2 天前
Jmeter 的使用
jmeter·测试
爱码驱动3 天前
校园IT交流论坛-软件测试报告(功能/接口/自动化)
自动化·测试
甜甜圈圈子3 天前
基于CANoe的uds诊断的配置以及使用
测试
Bear on Toilet4 天前
1.1 认识测试
测试
aka卡卡5 天前
搭建Mock服务
测试
kekegdsz6 天前
高丢包、高延迟、断网秒切:开源一个 Android 弱网测试利器
android·测试
呼啦啦5617 天前
初认识测试
测试