欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

又开始的python-day03-20200718-列表-深浅拷贝-元组-字典

程序员文章站 2022-04-16 16:21:13
# 当我们有多个数据保存 有序可变 可修改# 列表的格式# 使用 [] s来表示一个列表 列表的每一个数据称之为元素# 元素之间使用逗号分割# names = ['zss','jack','chenglong']# list 可以将可迭代对象转换成列表names = list(('zss','jack','chenglong'))print(names)#可以用下标获取print(names[2])names[2]='shy'print(names)print(names[1:2]...
# 当我们有多个数据保存 有序可变 可修改
# 列表的格式
# 使用 [] s来表示一个列表  列表的每一个数据称之为元素
# 元素之间使用逗号分割
# names = ['zss','jack','chenglong']
# list 可以将可迭代对象转换成列表
names = list(('zss','jack','chenglong'))
print(names)
#可以用下标获取
print(names[2])
names[2]='shy'
print(names)
print(names[1:2]) #下标切片



# 列表的操作
# 增删改查
heros = ['阿轲','嬴政','韩信','露娜','后羿','亚瑟']
# 添加元素 append insert extend
heros.append('猴子')
print(heros) #append 在列表最后面追加一个数据
# insert(index,object) 需要2个参数
# index 表示下标 在那个位置插入数据
# object 表示对象,具体插入那个数据
heros.insert(3,'李白')
print(heros)
#a.extend(b) 将b添加到a
x = ['特玛西亚','猫咪']
heros.extend(x)
print(heros)

# 删除数据 pop remove clear
# pop 方法默认删除列表的最后一个数据 并返回这个数据
masters = ['妲己','小乔','大乔']
x = masters.pop(1)
print(x)
print(masters)
# remove 删除指定的元素 如果数据不存在会报错
masters.remove('大乔')
print(masters)
# del 也可以删除 少用 或者不用 有别的用处
del masters[0]
print(masters)
# clear 用来清空一个列表
masters.clear()
print(masters)

tanks = ['猴子','德玛','天使','张飞','程咬金','猴子']
# 修改元素 下标可以直接修改
tanks[1] = '凯'
print(tanks)

# 查询相关的方法
print(tanks.index('天使')) # 2  下标
print(tanks.count('猴子')) # 2  统计次数
#in 运算符
print('天使' in tanks) #True
print('薇恩' in tanks) #False


# 遍历 将所有数据都访问一遍
# whiles / for ..in 
killers = ['李白','兰陵王','韩信','赵云','阿轲','孙悟空']
for i in killers: # 本质是不断调用迭代器的next的方法查找下一个数据
	print(i)

i=0
while i < len(killers):
	print(killers[i])
	i += 1

# 两个变量的交换
# 用第三个变量
a = 2
b = 3
# c = b
# b = a
# a = c
# 使用异或运算符 a ^ a ^ b = b
# a = a ^ b
# b = a ^ b
# a = a ^ b
# python 独有的 
a,b = b,a
print(a)
print(b)

# 冒泡排序
nums = [6,5,3,1,8,7,2,4]
# 0 1
# 1 2
# len(nums)-2 len(nums)-1
# 0 1 2 3 4 5 6 7
# 比较次数的优化
# print(len(nums))
# n=0
# while n < len(nums):
	# i=0
	# while i < len(nums) -1:
		# if nums[i] > nums[i+1]:
			# nums[i],nums[i+1] = nums[i+1],nums[i]
		# i += 1
	# n += 1
# print(nums)
# P81
# 调用列表的sort方法 可以直接对列表进行排序
# nums.sort() #排序
# nums.sort(reverse=True) #倒序
# print(nums)
# 内置函数 sorted 也是排序 不会改变原来的数据
print(sorted(nums))
names = ['zss','shy','love']
names.reverse() #reverse 列表的反转
print(names)



#列表的复制
# 可变类型 和 不可变类型’
# 不可变类型 如果修改值 内存地址会发生变化
# 可变类型 如果修改值 内存地址不会发生变化
x = [100,200,300]
y = x
# 调用copy 方法 复制一个列表 虽然内容一样 但却指向了不同的内存空间
z = x.copy()
x[0] = 1
print(y) # y 受 x 的影响 x 变化了 y 也会变化
print(z) # z 不受x 的影响
#  除了列表自带的copy方法外 还可以使用 copy模块实现拷贝
import copy
a = copy.copy(x) # 效果等价于x.copy() 都是浅拷贝
# 还有个是深拷贝

# 切片其实就是浅拷贝
x = [100,200,300]
y = x[::]
x[0] = 1
print(y)


#冒泡排序优化
# 第一趟比较 多比较了1次
# 第二趟比较 多比较了2次
# 
n=0
count=0
while n < len(nums):
	i=0
	flag = True #假设每一趟比较都没换行
	while i < len(nums) -1 - n: #优化了21次
		count += 1
		if nums[i] > nums[i+1]:
			nums[i],nums[i+1] = nums[i+1],nums[i]
			flag = False #交换了 假设就不成立
		i += 1
	if flag:
		break #没有数据交换 就不用比较了
	n += 1
print(nums)
print(count)

#求列表里的最大数
nums = [3,23,4,667,8,9,0,234,123,123,45,23]
nums.sort()
print(nums[-1])

x = nums[0]
for num in nums:
	if num > x:
		x = num
print(x) #最大值
print(nums.index(x)) #求最大值的下标

# 删除列表的空字符串
x = ['','','','','','','zss','shy']
# 在使用for..in 循环遍历列表的时候 最好不要对元素进行增删操作
# 保险点 把不是空的追加到新的表
x2 = []
for word in x:
	if word != '':
		x2.append(word)
print(x2)

#列表的嵌套
import random
nums = [1,2,3,[100,233,2222],222] #在别的语言叫做多维数组
# 一个学校 有3个办公室 现在有8位老师 等待工位的分配 请编写程序 完成随机分配
teachers = ['a','b','c','d','e','f','g','h','i','j']
rooms = [[],[],[]]
for teacher in teachers:
	room = random.choice(rooms) # choice 从列表里随机选一个数据
	room.append(teacher)
print(rooms)

# 第0个房间有3个人
# 带下标的一般用while 其实for 也可以
for i,room in enumerate(rooms):
	print('房间%d里一共有%d个老师,分别是:' % (i,len(room)),end='')
	for teacher in room:
		print(teacher,end=' ')
	print()
	
# 列表推导式
# 使用简单的语法创建一个列表
nums = [i for i in range(10)]
print(nums)
nums = [i for i in range(10) if i % 2 == 0]
print(nums) # 偶数
nums = [i for i in range(10) if i % 2 ] # 布尔值 余数 0 False 1 True
print(nums) # 奇数
x = []
for i in range(10):
	if i % 2:
		x.append(i)
points = [(x,y) for x in range(5,9) for y in range(10,20)]
print(points)
# 用一段代码实现分组一个list的元素 [1,2,3,4,....100] 变为 [[1,2,3],[4,5,6]...]
lis = [x for x in range(1,101)]
n = [lis[j:j+3] for j in range(0,100,3)]
print(n)

# 深拷贝和浅拷贝
nums = [1,2,3,4,5]
num1 = nums # 这是赋值 不是深拷贝 也不是浅拷贝
num2 = nums.copy() # 浅拷贝 两个内容一样 但不是同一个对象
num3 = copy.copy(nums) # 和 nums.copy() 功能一样 都是浅拷贝

# 深拷贝 只能使用copy模块实现
import copy
words = ['hello','good',[100,200],'yes','hi','ok']
words1 = words.copy() #浅拷贝 只拷贝了一层 如果列表里面还有列表 它只复制了里面列表的表面 深层指向其本质
words2 = copy.deepcopy(words) #深拷贝 复制了全部 且 独立存在 互不影响
words[1] = 'zss'
print(words1) # 没变化
words[2][0] = 1
print(words1) # 改变了 里面的列表
print(words2)
words2[2][0] = 2
print(words2)


# 元组的使用
# 和列表很像 都是用来保存数据的
# 使用一对小括号() 来表示一个元组
# 二者区别在于 列表是可变的 元组是不可变的
words = ['hello','yes','good'] # 列表 []
nums = (1,23,5,6,7,8,2,5,6,7,8,98,7,6) # 元组 使用()表示
# 和列表一样 也是一个有序的存储数据的容器 可以通过下标获取元素 但不可更改
print(nums[3]) # 下标是3的元素
print(nums.index(5)) # 获取5的下标
print(nums.count(6)) # 获取元素6出现的次数
# 特殊情况 表示一个只有一个元素的元组
ages = (18,)
print(ages)
# 内置类 tuple
print(tuple('hello')) # ('h', 'e', 'l', 'l', 'o')

# 列表和元组互相转换
print(tuple(words)) # tuple list set 都是这样使用的 列表转元组
print(list(nums)) # 元组转列表
heights = ("189","174","170") # join 里面必须是字符串
print('*'.join(heights)) # 189*174*170
print(''.join(('z','s','s'))) # zss

# 元组也可以遍历
for i in nums:
	print(i)
	
i = 0
while i < len(nums):
	print(nums[i])
	i += 1
	
	

# 字典的使用
# 列表[] 可修改 元组()不可修改
# 列表可以存储任意数据类型 但一般都存储单一数据类型
# 列表 可以存储值  但元素值代表什么 没去定义 而字典就可以解决
# 字典不仅保存值 还可以进行描述
# {}  表示一个字典 值 value 描述 key
# {key1:value1,key2:value2,....} 键值对之间以,分开
person = {'name':'zss','age':24,'x':'y','addr':'SZ','pass':True,'love':['唱','跳','rap'],4:'good',('yes','no'):100}
# 字典的注意事项
# 字典里的key不允许重复 如果重复了 后一个key值会覆盖前一个
# 字典里的value可以是任意数据类型 但是key只能使用不可变数据类型 字符串 数字 元组 ,一般使用字符串
print(person)

# 字典的增删改查
# 查找数据(字典的数据是无序的,不能通过下标查询)
print(person['name']) # 使用key获取到对应的value  而不能用value 找key 因为value不是唯一的
x = 'age'
print(person[x]) #  24
print(person['x']) # y
# print(person['xx']) # key不存在会直接报错
# 需求 如果key不存在 不报错 使用默认值
# 字典的get方法
print(person.get('xx')) # key不存在 不报错返回None
print(person.get('xx','zsss')) # key不存在 不报错 返回使用给定的默认值 zsss
print(person.get('name','haha')) # key 存在 就返回key对应的值
print(person) # get的方法 并不会改动原字典
# 修改数据 新增数据
person['name'] = 'haha' # 修改key值对应的value值
print(person)
person['gender'] = 'pople' # 如果key值不存在 就直接添加进去
print(person)
# 删除数据 pop popitem clear
person.pop('name')
print(person)
result = person.popitem()
print(result) # 得到被删除的键值对
print(person)
del person['addr'] # 运算符 del 删除一个
print(person)
person.clear() # 清空字典
print(person)

# update 方法的使用
# 列表可以使用extend方法 将两个列表合并成一个列表
nums = [1,2]
nums1 = [3,4]
nums.extend(nums1)
print(nums)
print(nums + nums1) # 也可以用运算 +

# 元组
word = (1,23)
wod1 = (33,222)
print(word + wod1) # 可以用运算 + 而没有方法去直接合并

# 字典 可以使用 update 方法 合并2个字典
person1 = {'name':'zss','age':24}
person2 = {'addr':'SZ','phone':888}
person1.update(person2)
print(person1)
# print(person1 + person2) # 字典之间不支持加法运算
# P98

# 字典的遍历
person = {'name':'zss','age':24}
# 特殊在列表和元组都是单一的数据 而字典是键值对的形式
# 第一种方法 for...in  循环
for x in person: # 循环获取的是key值
	print(x,'=',person[x])
# 第二种 获取所有的key 然后再遍历key 再根据key获取value
for k in person.keys():
	print(k,'=',person[k])	
# 第三种 获取到所有的value
for v in person.values():
	print(v)
# 第四种
for item in person.items():
	print(item[0],'=',item[1])
for k,v in person.items(): #dict_items([('name', 'zss'), ('age', 24)])
	print(k,'=',v)
	

# 字典的练习
chars = ['a','c','s','s','a','g','w','a','t','t'] #统计字母出现次数
char_count = {} #用字典去存储数据
for char in chars:
	if char in char_count:
		#在里面
		char_count[char] += 1
	else:
		#不在里面
		char_count[char] = 1
print(char_count)
# 下面这个方法更好一点
char_count = {} #用字典去存储数据
for char in chars:
	if char not in char_count:
		char_count[char] = chars.count(char)
print(char_count)
# 取出出现次数最多的字母
# 内置函数 max() 取最大值
for k,v in char_count.items():
	if v == max(char_count.values()):
		print(k)
	
# 让用户输入用户 如果姓名存在 提示用户 如果不存在 继续输入年龄 并存入列表
# {} 字典 [] 元组
persons = [{'name':'zss','age':24},{'name':'jack','age':22}]
# name = input("请输入你的姓名:")
# for i in persons:
	# if i['name'] == name:
		# # 用户存在
		# print('用户存在')
		# break
# else: # for...else....
	# # 用户不存在 继续输入年龄
	# new_dic = {}
	# new_dic['name'] = name
	# age = int(input("请输入你的年龄:")) #整数类型
	# # 把年龄和姓名组成一个字典
	# new_dic['age'] = age
	# # 再把字典加入到列表内
	# persons.append(new_dic)
	# print('用户添加成功')
# print(persons)

# 字典对应数据换位置
dict1 = {"a":100,"b":200,"c":300}
# {100: 'a', 200: 'b', 300: 'c'}
dict2 = {}
for k,v in dict1.items():
	dict2[v] = k
print(dict2)
# 字典推导式
dict1 = {v:k for k,v in dict1.items()}
print(dict1)

本文地址:https://blog.csdn.net/weixin_43862755/article/details/107426880

相关标签: Python 列表