Day2_元组_字典_集合_字符编码_文件处理
元组:
作用:存多个值,元组不可变,主要用来读
age=(11,22,33,44,55)
print(age[2]) #取出元组内的值
print(age[1:4]) #取出元组内的某些值
print(age.index(33)) #取出33的索引
print(age.count(33)) #取出值得数量
字典类型:
作用:存多个值,key-value存取,取值速度快。
定义:key必须是不可变类型,value可以是任意类型。
#取出字典的值
info={'name':'yangshuai','age':22,'sex':'male'}
print(info('age'))
重要操作:
*.pop() #删除字典内的某个值,括号内输入的是key的值
*.pop('sasadsad',None) #当取出某个不存在的值得时候会报错,这样定义可以在取不存在的值得时候输出自定义的值。
*.get() #取出字典内的值,括号内输入的是可以的值
*.get('sdasdasd',None) #跟get同理
掌握的:
*.popitem() #随机弹出一个key-value值
*.keys() #输出字典的所有的key
*.values() #取出字典所有的values
打印字典中的所有值:
定义一个字典dic, for key.values in dic.items(): print(key,values)
*.clear() #清空字典
*.formkeys() #利用输入的内容快速创建一个字典:
dic=info.formkeys(['name','age','sex'],1111) #注意这样传入的值,所有value都是一样的,只有key是不同的。
*.update() #括号内放的是以字典,是将括号内字典的内容更新到旧的字典中,不存在的加入,存在的替换。
另外一种方式创建字典:
print(dict([('name','yangshuai'),('age',18),('sex','male')]))
*.setdefault()小练习:
#定义一个空字典,加一条用户的详细信息,各种参数加入
d={}
print(d)
d['name']='yangshuai'
d['age']=18
d['sex']='male'
#d['hobby']=[]    #多个可以不断变化,最好利用列表来表示
#d['hobby'].append('play basketball')
#d['hobby'].append('paly football')
#当加入字典的一个key对应多个值的时候,需要先定义一个新空列表,一个个往里边加值,这样我们可以利用*.setdefault()这个参数,简写程序。
d.setdefault('hobby',[]).append('paly basketball')
d.setdefault('hobby',[]).append('paly football')
print(d)
字典练习:
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
a={'k1':[],'k2':[]}
c=[11,22,33,44,55,66,77,88,99,90]
for i in c:
    if i>66:
        a['k1'].append(i)
    else:
        a['k2'].append(i)
print(a)
统计s='hello alex alex say hello sb sb'中每个单词的个数,结果如:{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2}
s='hello alex alex say hello sb sb' l=s.split()
dic={}
for item in l:
if item in dic:
dic[item]+=1
else:
dic[item]=1
print(dic)
集合:
作用:去重,关系运算
集合内的可以有多个元素,但是每个元素都是不可变类型,即可hash类型。
集合内的元素唯一
定义:s={1,‘ss’,2,34,2,424}
优先掌握的用法:
判断某个值在不在集合中: value in 字典
关系运算:
s1={1,10,11,22}
s2={1,11,33}
#求两个交集
print(s1 & s2)
#求两个并集
print(s1 | s2)
#求差集
#只在s1内的,不在s2的
print(s1-s2)
#求不同时在s1和s2的,对称差集
print(s1 ^ s2)
#谁是谁的父集,s1 >= s2
#谁是谁的子集,s1 <= s2
s1={1,2,3,4}
s2={1,2}
print(s1 <= s2)
print(s1 >= s2)
去重小练习:
1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序
2.在上题的基础上,保存列表原来的顺序
   3.去除文件中重复的行,肯定要保持文件内容的顺序不变
   4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序
l=[
{'name':'egon','age':18,'sex':'male'},
{'name':'alex','age':73,'sex':'male'},
{'name':'egon','age':20,'sex':'female'},
{'name':'egon','age':18,'sex':'male'},
{'name':'egon','age':18,'sex':'male'},
]
#去重,无需保持原来的顺序
l=['a','b',1,'a','a']
print(set(l)) #去重,并保持原来的顺序
#方法一:不用集合
l=[1,'a','b',1,'a'] l1=[]
for i in l:
if i not in l1:
l1.append(i)
print(l1)
#方法二:借助集合
l1=[]
s=set()
for i in l:
if i not in s:
s.add(i)
l1.append(i) print(l1) #同上方法二,去除文件中重复的行
import os
with open('db.txt','r',encoding='utf-8') as read_f,\
open('.db.txt.swap','w',encoding='utf-8') as write_f:
s=set()
for line in read_f:
if line not in s:
s.add(line)
write_f.write(line)
os.remove('db.txt')
os.rename('.db.txt.swap','db.txt') #列表中元素为可变类型时,去重,并且保持原来顺序
l=[
{'name':'egon','age':18,'sex':'male'},
{'name':'alex','age':73,'sex':'male'},
{'name':'egon','age':20,'sex':'female'},
{'name':'egon','age':18,'sex':'male'},
{'name':'egon','age':18,'sex':'male'},
]
# print(set(l)) #报错:unhashable type: 'dict'
s=set()
l1=[]
for item in l:
val=(item['name'],item['age'],item['sex'])
if val not in s:
s.add(val)
l1.append(item) print(l1) #定义函数,既可以针对可以hash类型又可以针对不可hash类型
def func(items,key=None):
s=set()
for item in items:
val=item if key is None else key(item)
if val not in s:
s.add(val)
yield item print(list(func(l,key=lambda dic:(dic['name'],dic['age'],dic['sex']))))
--摘自老男孩egon笔记
集合内置方法:
定义集合A,集合B
求交集:print(A.intersection(B))
求并集:print(A.union(B))
求差集:print(A.difference(B))
求对称差集(去掉共同部分):print(A.symmetric_difference(B))
A.add() #向集合添加值
A.pop() #随机删除值
A.remove() #指定删除值
A.discard() #删除不存在的值可以不报错
数据类型总结:
按照存值个数区分:
标量/原子类型:数字,字符串
容器类型:列表,元组,字典
按照不可变区分:
可变:字典,列表
不可变:数字,字符串,元组
按访问顺序区分:
访问方式:数字
按照索引访问: 字符串,列表,元组
按照映射访问:字典
Day2_元组_字典_集合_字符编码_文件处理的更多相关文章
- python学习道路(day3note)(元组,字典 ,集合,字符编码,文件操作)
		
1.元组()元组跟列表一样,但是不能增删改,能查.元组又叫只读列表2个方法 一个 count 一个 index2.字典{}字典是通过key来寻找value因为这里功能比较多,所以写入了一个Code里面 ...
 - Python-字典、集合、字符编码、文件操作整理-Day3
		
1.字典 1.1.为什么有字典: 有个需求,存所有人的信息 这时候列表就不能轻易的表示完全names = ['stone','liang'] 1.2.元组: 定义符号()t = (1,2,3)tupl ...
 - Python中列表、元组、字典、集合与字符串,相关函数,持续更新中……
		
本篇博客为博主第一次学 Python 所做的笔记(希望读者能够少点浮躁,认真阅读,平心静气学习!) 补充: 列表.元组和字符串共同属性: 属于有序序列,其中的元素有严格的先后顺序 都支持双向索引,索引 ...
 - Python黑帽编程2.3  字符串、列表、元组、字典和集合
		
Python黑帽编程2.3 字符串.列表.元组.字典和集合 本节要介绍的是Python里面常用的几种数据结构.通常情况下,声明一个变量只保存一个值是远远不够的,我们需要将一组或多组数据进行存储.查询 ...
 - python数据类型之元组、字典、集合
		
python数据类型元组.字典.集合 元组 python的元组与列表类似,不同的是元组是不可变的数据类型.元组使用小括号,列表使用方括号.当元组里只有一个元素是必须要加逗号: >>> ...
 - Python 学习笔记(1)Python容器:列表、元组、字典与集合
		
Python容器:列表.元组.字典与集合 列表: 1.列表 的创建 使用[ ] 或者 list()创建列表:empty_list = [ ] 或者 empty_list= list() 使用list( ...
 - python基础知识3——基本的数据类型2——列表,元组,字典,集合
		
磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把--整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的. 一.列表 1.列 ...
 - 菜鸟学IT之python3关于列表,元组,字典,集合浅认识!
		
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2753 一.列表,元组,字典,集合分别如何增删改查及遍历. 列表 # 列表的 ...
 - python学习Day6 元组、字典、集合set三类数据用法、深浅拷贝
		
一.深浅拷贝 1. 值拷贝 ls1 = ls2 不开辟空间,指针跟着走.(直接将ls1中存放的地址拿过来,内存中不会开辟新的空间,所以你怎么变,我也跟着变.)(ls1内部的所有类型的值发生改变,l ...
 - python_列表、元组、字典、集合对比
		
列表.元组.字典.集合 列表.元组.字典.集合对比 比较项 列表 元组 字典 集合 类型名称 list tuple dict set 定界符 [] () {} {} 是否可变 是 否 是 是 是否有序 ...
 
随机推荐
- (八十六)使用系统自带的分享框架Social.framework
			
使用Social.framework十分简单,能够便捷的分享到主流的社交框架. ①导入主头文件 #import <Social/Social.h> ②以新浪微博为例,首先判断服务是否可用, ...
 - 【一天一道LeetCode】#119. Pascal's Triangle II
			
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
 - Android PackageManager源码浅析以及静默安装实现方式
			
Aandroid应用管理 >http://blog.csdn.net/sk719887916/article/details/50314017 skay整理. >201 ...
 - Android性能优化之被忽视的优化点
			
对于性能优化这个知识点来说,实在是太广了,博主本人也一直非常关注这方面的学习,而对于性能优化来说它包括了非常非常非常多方面,比如:I/O的优化.网络操作的优化.内存的优化.数据结构的优化.代码层次的优 ...
 - 【翻译】在Ext JS 6通用应用程序中使用既共享又特定于视图的代码
			
原文:Using Both Shared and View-Specific Code in an Ext JS 6 Universal App 在本文,在展示如何编写Ext JS 6通用应用程序代码 ...
 - (NO.00003)iOS游戏简单的机器人投射游戏成形记(十八)
			
在游戏中制作手臂瞄准线,也就是所谓的辅助延长线.玩台球游戏的童鞋应该可以了解. 按道理来说,延长线是一个物理实体,遇到物理刚体应该会发生反弹行为,这个符合实际游戏逻辑. 但是这里为了简单,只是做一条& ...
 - MFC的两个问题
			
1.启动WinApp的时候,报 ASSERT(AfxGetThread() == NULL)错误依赖的MFC DLL工程设置里面加上_USRDLL2. MFC误报内存泄露全局对象释放的问题,添加mfc ...
 - Socket编程实践(7) --Socket-Class封装(改进版v2)
			
本篇博客定义一套用于TCP通信比较实用/好用Socket类库(运用C++封装的思想,将socket API尽量封装的好用与实用), 从开发出Socket库的第一个版本以来, 作者不知道做了多少改进, ...
 - Android 纵向跑马灯滚动效果
			
像淘宝和京东都会有跑马灯的效果,今天给大家贡献下以前项目的一个demo,各位看官,且看效果图. 我们先定义一个Bean文件,这个实体类文件主要包含标题,内容描述,以及还有跳转的链接. LampBean ...
 - OC内存管理-OC笔记
			
内存管理细节:http://blog.sina.com.cn/s/blog_814ecfa90102vus2.html 学习目标 1.[理解]内存管理 2.[掌握]第一个MRC程序 3.[掌握]内存管 ...