python基础数据类型四
来源:互联网 发布:产品跟踪软件 编辑:程序博客网 时间:2024/05/16 12:30
补充
list
在for循环中最好不要进行删除操作
在for循环中进行删除:经常出现的问题
1.索引超出范围
lis = [11,22,33,44,55]for i in range(len(lis)): del lis[i]----------------Traceback (most recent call last): File "D:/untitled/demo.py", line 4, in <module> del lis[i]IndexError: list assignment index out of range
这就是 一个 因为循环删除操作 造成的 索引 超出范围的例子
2.不报错但是数据混乱
lis = [11,22,33,44,55]for i in lis: lis.pop()----------------lis:[11,22]
因为当循环的时候 当前 i 超出当前循环的列表,直接退出循环
示例1:
需求:lis = [11,22,33,44,55] 删除列表 索引为奇数的元素
方法一
lis = [11,22,33,44,55]lis = lis[::2]
方法二
lis = [11,22,33,44,55]l1 = []for i in lis: if lis.index(i) % 2 == 0: l1.append(i) lis = l1print(lis)
方法三
lis = [11,22,33,44,55]for i in range(len(lis)-1,-1,-1): if i % 2 == 1: del lis[i]
方法四
lis = [11,22,33,44,55]for i in lis[::-1]: if lis.index(i) % 2 == 0: lis.pop(lis.index(i))
总结
遇到需要迭代删除的问题,首先考虑是否可以不用删除而用添加后赋值的方式解决,如果不能解决,可以考虑逆向删除,不会影响到list的索引问题,或者就使用两个列表进行删除
dict
在for循环中不能进行删除操作
在for循环中进行删除:删除当前循环的字典就报错
dic = {'k1':'v1', 'k2':'v2', 'a3':'v3'}for i in dic: if i.find('k') != -1: dic.pop(i)-------------------Traceback (most recent call last): File "D:/untitled/demo.py", line 25, in <module> for i in dic:RuntimeError: dictionary changed size during iteration
解决方法
# dic = {'k1':'v1', 'k2':'v2', 'a3':'v3'}# dic2 = {'k1':'v1', 'k2':'v2', 'a3':'v3'}# for i in dic:# if i.find('k') != -1:# dic2.pop(i)## print(dic2)
集合
描述
在python中set的底层结构和字典是完全一样的都是哈希表,就当成是只有键没有值的字典就可以了。
Python 早期版本就没有set这个类型,那时候开发者都是直接建一个 {key1:None, key2:None}的字典来实现set的功能。
字典和set都是用空间来换时间,空间浪费很大。
set的最大用途是解决了判断某个元素在集合中出现的查找效率问题。
集合中的元素有三个特征:
- 确定性(集合中的元素必须是确定的)
- 互异性(集合中的元素互不相同。例如:集合A={1,a},则a不能等于1)
- 无序性(集合中的元素没有先后之分),如集合{3,4,5}和{3,5,4}算作同一个集合。
常用用法
- 去重
- 测试两组数据之间的交集、差集、并集等关系。
方法
集合的创建
集合中的元素必须是不可变类型
set1 = set({1,2,'night'})set2 = {1,2,3}
增加
add
set1 = {'charmNight',1,2,3}set1.add('naem')print(set1)
update
将数据迭代添加到集合中
set1 = {'charmNight',1,2,3}set1.update([1,2,3])print(set1)------------{1, 2, 3, 11, 12, 13, 'charmNight'}
set1 = {'charmNight',1,2,3}set1.update({'name':111})print(set1)--------------{1, 2, 3, 'name', 'charmNight'}
删除
remove
set1 = {'charmNight',1,2,3}set1.remove(1) # 根据元素删除
pop
set1 = {'charmNight',1,2,3}set1.pop() # 随机删除一个 并返回删除的值
clear
set1 = {'charmNight',1,2,3}set1.clear() # 清空集合
del
set1 = {'charmNight',1,2,3}del set1 # 删除集合
查询
只能使用迭代查询
set1 = {'charmNight',1,2,3}for i in set1: print(set1)
集合的其他操作
交集。(& 或者 intersection)
set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 & set2) # {4, 5}print(set1.intersection(set2)) # {4, 5}
并集。(| 或者 union)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8}print(set1.union(set2)) # {1, 2, 3, 4, 5, 6, 7, 8}
差集。(- 或者 difference)
特有的元素
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8}print(set1 - set2) # {1, 2, 3}print(set1,set2) # {1, 2, 3, 4, 5} {4, 5, 6, 7, 8}print(set2.difference(set1)) # {8, 6, 7}
反交集。 (^ 或者 symmetric_difference)
set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}print(set2.symmetric_difference(set1)) # {1, 2, 3, 6, 7, 8}
子集与超集
set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 < set2) # Falseprint(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。print(set2 > set1) # Falseprint(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
阅读全文
0 0
- python基础数据类型四
- python基础:数据类型和变量-python简易教程(四)
- python基础01-数据类型
- Python基础1--数据类型
- python基础_数据类型
- Python基础 基本数据类型
- Python基础-数据类型
- Python基础之数据类型
- python基础学习-数据类型
- python基础之数据类型
- Python基础数据类型
- python基础----变量,数据类型
- Python基础之数据类型
- Python基础之数据类型
- python基础--基本数据类型
- python基础数据类型一
- python基础数据类型二
- python基础数据类型三
- 网络设备之集线器
- 安徽省淮北市谷歌卫星地图下载
- Window下安装RabbitMQ
- rabbitMQ第三篇:采用不同的交换机规则
- Verilog开发中“=”和“<=”的区别
- python基础数据类型四
- 开源大数据周刊-第76期
- Extjs-Grid前添加选项框以及多选方式。
- 今日,冬至
- Qt之setCodecForLocale
- django-rest-framework序列化的使用(一)
- Django(三)模型与数据库
- Python 异常错误记录
- sleep 和 wait 的区别