内容介绍

  • 数据类型
  • 字符编码
  • 文件处理

1.什么是数据?

x=10 , 10是我们要存储的数据。

2.为何数据要分不同的类型

数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示

3.数据类型

  • 数字(整形,长整形,浮点型,复数)
  • 字符串
  • 字节串:在介绍字符编码时介绍字节bytes类型
  • 列表
  • 元组
  • 字典
  • 集合

4.按照以下几个点展开数据类型的学习

#一:基本使用
1 用途
2 定义方式
3 常用操作+内置的方法

#二:该类型总结
1 存一个值or存多个值
    只能存一个值
    可以存多个值,值都可以是什么类型

2 有序or无序

3 可变or不可变
    !!!可变:值变,id不变。可变==不可hash
    !!!不可变:值变,id就变。不可变==可hash

数字

整型与浮点型

#整型int
    作用:年纪,等级,身份证号,qq号等整型数字相关
    定义:
        age=10  #本质age=int(10)

#浮点型float
    作用:薪资,身高,体重,体质参数等浮点数相关

    salary=3000.3 #本质salary=float(3000.3)

#二进制,十进制,八进制,十刘进制

其他数字类型(了解)

```py

长整形(了解# )

在python2中(python3中没有长整形的概念):
>>> num=2L
>>> tpye(num)
<type 'long'>

复数(了解)

>>> x=1-2j
>>> x.real
1.0
>>> x.imag
-2.0

字符串

#作用: 名字,性别,国籍,地址等描述信息
#定义: 在单引号、双引号、三引号内,由一串字符组成
name='egon'

#优先掌握的操作:
按索引取值(正向取+反向取):只能取
切片(顾头不顾尾,步长)
长度len
成员运算in和not in

移除空白strip
切分split
循环

基他操作(包括常用)

#strip
name='*egon**'
print(name.strip('*'))
print(name.lstrip('*'))
print(name.rstrip('*'))

#startswith,endswith
name='alex_SB'
print(name.endswith('SB'))            #判断字给定字符串是否在结尾,如果在则返回True,不在则为False
print(name.startswith('alex'))           #判断给定字符串是否在开头,如果在则返回True,不在则为False

#replace
name='alex say :i have one tesla,my name is alex'
print(name.replace('alex','SB',1))                #替换,把alex替换为SB,1表示只替换匹配到的第一个字符串

#format的三种玩法
res='{} {} {}'.format('egon',18,'male')        #format,自定义格式,注意中间的空格。把format后面的字符串放入大括号中。
res='{1} {0} {1}'.format('egon',18,'male')    #按照输入的位置,按0,1,2,3指定位置排列。
res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)        #设置变量,指定变量的位置,format后面的输入顺序就不重要了。

#find,rfind,index,rindex,count
name='egon say hello'
print(name.find('0',1,3))  #查找0,顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引
# print(name.index('e',2,4)) #同上,但是找不到会报错
print(name.count('e',1,3))  #顾头不顾尾,如果不指定范围则查找所有

#split
name='root:x:0:0::/root:/bin/bash'
print(name.split(':')) #指定冒号为默认分隔符 为空格
name='C:/a/b/c/d.txt' #只想拿到顶级目录
print(name.split('/',1))

name='a|b|c'
print(name.rsplit('|',1))   #从右开始切分

#join
tag=' '
print(tag.join(['egon','say','hello','world']))  #可迭代对必须都是字符串,把tag加入到对应的字符串中。

#center,ljust,rjust,zfill
name='egon'
print(name.center(30,'-'))        #30为总字符串,让name在30个字符中居中,不够的用-填充。
print(name.ljust(30,'*'))            #30为总字符串,让name在30个字符中排最左,不够用*填充
print(name.rjust(30,'*'))            #30为总字符串,让name在30个字符中排最右,不够用*填充。
print(name.zfill(50))   #用0填充50个字符,name在最右。

#expandtabs
name='egon\thello'        #\t制表符
print(name)
print(name.expandtabs(1))        #1为指定多少个字隔做为分隔符号。

#lower,upper
name='egon'
print(name.lower())            #全替换为小写
print(name.upper())            #全替换为大写

#captalize,swapcase,title
print(name.capitalize())    #首字母大写
print(name.swapcase())      #大小写翻转
msg='egon say hi'
print(msg.title())      #每个单词的首字母大写

#is数字系列
#在python中
num1=b'4'   #bytes
num2=u'4'   #unicode,python3中无需加u就是unicode
num3='四'    #中文数字
num4='IV'   #罗马数字

#isdigt:bytes,unicode
print(num1.isdigit())   #True
print(num2.isdigit())   #True
print(num3.isdigit())   #False
print(num4.isdigit())   #False

#isnumberic:unicode中文数字,罗马数字
#bytes类型无isnumberic方法
print(num2.isnumeric()) #True
print(num3.isnumeric()) #True
print(num4.isnumeric()) #True

#三者不能判断浮点数
num5='4.3'
print(num5.isdigit())
print(num5.isdigit())
print(num5.isdigit())
'''
总结:
    最常用的isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
    如果要判断中文数字或罗马数字,则需要用到isnumeric
'''

#is其他
print('===>')
name='egon123'
print(name.isalnum())   #判断字符串是否由字母或数字组成
print(name.isalpha())   #判断字符串是否只由字母组成

print(name.isidentifier())
print(name.islower())
print(name.isupper())
print(name.isspace())
print(name.istitle())

练习

# 写代码,有如下变量,请按照要求实现每个功能
name = " aleX"
# 1)    移除name 变量对应的值两边的空格,并输出处理结果
# 2)    判断name变量对应的值是否以"al"开头,并输出结果
# 3)    判断name变量对应的值是否以"X"结尾,并输出结果
# 4)    将 name变量对应的值中的"1"替换为"p",并输出结果
# 5)    将 name 变量对应的值根据 “l” 分割,并输出结果。
# 6)    将 name 变量对应的值变大写,并输出结果

# 7)    将 name 变量对应的值变小写,并输出结果

# 8)    请输出 name 变量对应的值的第 2 个字符?
# 9)    请输出 name 变量对应的值的前 3 个字符?
# 10)    请输出 name 变量对应的值的后 2 个字符?

# 11)    请输出 name 变量对应的值中 “e” 所在索引位置?

# 12)    获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
# 写代码,有如下变量,请按照要求实现每个功能
name = 'alex'

#1) 移除name变量对应的值两边的空格,并输出处理结果
name = 'alex'
a=name.strip()
print(a)

# 2) 判断name 变量对应的值是否以"al"开头,并输出结果
name='alex'
if name.startswith(name):
    print(name)
else:
    print('no')

# 3)    将name变量对应的值是否以"x"结尾,并输出结果
name='alex'
if name.endswith(name):
    print(name)
else
    print('no')

# 4) 将name变量对应的值中的"1"替换为"p",并输出结果
name='alex'
print(name.replace('1','p'))

# 5) 将name 变量对应的值根据"1"分割,并输出结果。
name='alex'
print(name.split('1'))

# 6)  将name变量对应的值变大写,并输出结果
name='alex'
print(name.upper())

# 7)  将name变量对应的值变小写,并输出结果
name='alex'
print(name.lower())

# 8) 请输出name变量对应的值的第2个字符?
name='alex'
print(name[1])

# 9) 请输出name变量对应的值的前3个字符
name='alex'
print(name[:3])

# 10) 输出name变量对应的值的后2个字符
name='alex'
print(name[-2:1])

# 11)  请输出name变量对应的值中"e"所在索引位置
name='alex'
print(name.index('e'))

# 12)  获取子序列,去掉最后一字符。如:oldboy 则获取oldbo
name='alex'
a=name[:-1]
print(a)

四、列表

#作用: 多个装备,多个爱好,多门课程,多个女朋友等

#定义: []内可以有多个任意类型的值,逗号分隔
my_girl_friends=['alex','wupeiqi','yuanhao',4,5] #本质my_girl_friends=list([...])
或
l=list('abc')

#优先掌握的操作
按索引存取值(正向存取+反向存取):即可存也可以取
切片(顾头不顾尾,步长)
长度
成员运算in和not in

追加
删除
循环
#ps:反向步长
l=[1,2,3,4,5,6]

#正向步长
l[0:3:1]  #[1,2,3]
#反向步长
l[2::-1] #[3,2,1]
#列表翻转
l[::-1]  #[6,5,4,3,2,1]

练习:

1. 有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量
2.用列表模拟队列
3.用列表模拟堆栈
4.有如下列表,请按照年龄排序(涉及到匿名函数)
l=[
    {'name':'alex','age':84},
    {'name':'oldboy','age':73},
    {'name':'egon','age':18},
]
答案:
l.sort(key=lambda item:item['age'])
print(1)

五、元组

#作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要是用来读

#定义:与列表类型比,只不过[]换成()
age=(11,22,33,44,55)本质age=tuple((11,22,33,44,55))

#优先掌握的操作:
按索引取值(正向取+反向取):只能取
切片(顾头不顾尾,步长)
长度
成员运算in 和not in

循环

练习

#简单购物车,要求如下:
实现打印商品详细信息,用户输入商品名和购买数,则将商品名,价格,购买个数加入购物列表,如果输入为空或其他非法输入则要求用户重新输入

msg_dic={
    'apple':10,
    'tesla':100000,
    'mac':3000,
    'lenovo':30000,
    'chicken':10,
}
msg_dic={
    'apple':10,
    'tesla':100000,
    'mac':3000,
    'lenovo':30000,
    'chicken':10,
}
goods_l=[]
while True:
    for key,item in msg_dic.items():
        print('name:{name} price:{price}'.format(price=item,name=key))
    choice=input('商品>>: ').strip()
    if not choice or choice not in msg_dic:continue
    count=input('购买个数>>: ').strip()
    if not count.isdigit():continue
    goods_l.append((choice,msg_dic[choice],count))

    print(goods_l)

字典


#作用: 存多个值,key-value存取,取值速度快

#定义:key必须是不可变类型,value可以是任意类型
info={'name':'egon','age':18,sex='male'}  #本质info=dict({....})
或
info=dict(name='egon',age=18,sex='male')
或
info=dict([['name','egon'],('age',18)])
或
{}.fromkeys(('name','age','sex'),None)

#优先掌握的操作:
按key存取值:可存可取
长度len
成员运算in和not in

删除
键keys(),值values(),键值对items()
循环

练习

1.有如下值集合[11,22,33,44,55,66,77,88,99,90...],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中

即:  {'k1': 大于66的所有值,'k2': 小于66的所有值}
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)
2.统计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)

#其它做法
s='hello alex alex say hello sb sb'
dic={}
words=s.split()
print(words)
for word in words: #word='alex'
    dic[word]=s.count(word)
    print(dic)

#利用setdefault解决重复赋值
'''
setdefault的功能
1: key存在,则不赋值,key不存在则设置默认值
2: key存在,返回的是key对应的已有的值,key不存在,返回的则是要设置的默认值
d={}
print(d.setdefault('a',1))  #返回1

d={'a':2222}
print(d.setdefault('a',1))  #返回2222
'''
s='hello alex alex say hello sb sb'
dic={}
words=s.split()
for word in words: #word='alex'
    dic.setdefault(word,s.count(word))
    print(dic)

#利用集合,去掉重复,减少循环次数
s='hello alex alex say hello sb sb'
dic={}
words=s.split()
words_set=set(words)
for word in words_set:
    dic[word]=s.count(word)
    print(dic)

集合

#作用:去重,关系运算,

#定义:
        知识点回顾
        可变类型是不可hash类型
        不可变类型是可hash类型

#定义集合:
        集合:可以包含多个元素,用逗号分割,
        集合的元素遵循三个原则:
         1:每个元素必须是不可变类型(可hash,可作为字典的key)
         2:没有重复的元素
         3:无序

注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值

#优先掌握的操作:
长度len
成员运算in和not in

|合集
&交集
-差集
^对称差集
==
>, >= ,< ,<= 父集,子集

    二.去重

    1.有列表l=['a','b',l,'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',l,'a','a']
print(set(1))

#去重,并保持原来的顺序
#方法一:不用集合
l=[l,'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','ag':18,'sex':'male'},
    {'name':'alex','age':73,'sex':'female'},
    {'name':'egon','age':20,'sex':'female'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
]

# print(set(1))  #报错: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(1,key=lambda dic:(dic['name'],dic['age'],dic['sex']))))

八、数据类型总结

按存储空间的占用分(从低到高)
数字
字符串
集全:无序,即无序存索引相关信息
元组:有序,需要存索引相关信息,不可变
列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

按存值个数区分

标量/原子类型 数字,字符串

容器类型 列表,元组,字典

按可变不可变区分

可变 列表,字典

不可变 数字,字符串,元组

按访问顺序区分

直接访问 数字

顺序访问(序列类型) 字符串,列表,元组

key值访问(映射类型) 字典

九、运算符

#身份运算(is, is not)
is 比较的是id,而双等号比较的是值
毫无疑问,id若相同则值肯定相同,而值相同id则不一定相同

>>> x=1234567890
>>> y=1234567890
>>> x == y
True
>>> id(x),id(y)
(3581040,31550448)
>>> x is y
False

详细:http://www.cnblogs.com/linhaifeng/articles/5935801.html#_label34

十、字符编码

http:/www.cnblog.com/linhaifeng/articles/5950339.html

十一、文件处理

http://www.cnblog.com/linhaifeng/articles/5984922.html

python-day2数据类型的更多相关文章

  1. python day2:python的基本数据类型及其方法

    目录 python day2 1. 编码转换 2. python的基本数据类型 3. for 迭代遍历 4. 列表list 5. 元组tuple 6. 字典dict 7. 枚举enumerate 8. ...

  2. python 基本数据类型分析

    在python中,一切都是对象!对象由类创建而来,对象所拥有的功能都来自于类.在本节中,我们了解一下python基本数据类型对象具有哪些功能,我们平常是怎么使用的. 对于python,一切事物都是对象 ...

  3. python常用数据类型内置方法介绍

    熟练掌握python常用数据类型内置方法是每个初学者必须具备的内功. 下面介绍了python常用的集中数据类型及其方法,点开源代码,其中对主要方法都进行了中文注释. 一.整型 a = 100 a.xx ...

  4. 闲聊之Python的数据类型 - 零基础入门学习Python005

    闲聊之Python的数据类型 让编程改变世界 Change the world by program Python的数据类型 闲聊之Python的数据类型所谓闲聊,goosip,就是屁大点事可以咱聊上 ...

  5. python自学笔记(二)python基本数据类型之字符串处理

    一.数据类型的组成分3部分:身份.类型.值 身份:id方法来看它的唯一标识符,内存地址靠这个查看 类型:type方法查看 值:数据项 二.常用基本数据类型 int 整型 boolean 布尔型 str ...

  6. Python入门-数据类型

    一.变量 1)变量定义 name = 100(name是变量名 = 号是赋值号100是变量的值) 2)变量赋值 直接赋值 a=1 链式赋值  a=b=c=1 序列解包赋值  a,b,c = 1,2,3 ...

  7. Python基础:八、python基本数据类型

    一.什么是数据类型? 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能,计算机虽然很强大,但从某种角度上来看又很傻,除非你明确告诉它,"1"是数字,"壹&quo ...

  8. python之数据类型详解

    python之数据类型详解 二.列表list  (可以存储多个值)(列表内数字不需要加引号) sort s1=[','!'] # s1.sort() # print(s1) -->['!', ' ...

  9. 初识Python.day2

    一. python运算符 算数运算符  比较运算符 赋值运算符 逻辑运算符 成员运算符 二. Python基础数据类型 1. python字符串总结 # 首字母变大写 # a1 = "jiu ...

  10. Python特色数据类型(列表)(上)

    Python从零开始系列连载(9)——Python特色数据类型(列表)(上) 原创 2017-10-07 王大伟 Python爱好者社区 列表 列表,可以是这样的: 分享了一波我的网易云音乐列表 今天 ...

随机推荐

  1. Maven02——回顾、整合ssh框架、分模块开发、私服

    1 回顾 1.1 Maven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建 可跨平台 应用在大型项目可提高开发效率 1.2 Maven安装部署配置 1.3 Maven的仓库 本地仓库 远 ...

  2. CSS 选择器参考手册

    CSS3 选择器 在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素. "CSS" 列指示该属性是在哪个 CSS 版本中定义的.(CSS1.CSS2 还是 CSS3.) ...

  3. 基于Xilinx FPGA的视频图像采集系统

    本篇要分享的是基于Xilinx FPGA的视频图像采集系统,使用摄像头采集图像数据,并没有用到SDRAM/DDR.这个工程使用的是OV7670 30w像素摄像头,用双口RAM做存储,显示窗口为320x ...

  4. http://acm.hdu.edu.cn/showproblem.php?pid=1039(水~)

    判读条件 1:有元音字母 2:不能三个连续元音或辅音 3.不能连续两个相同的字母,除非ee或oo #include<cstdio> #include<cstring> #inc ...

  5. c++(合并排序)

    前面一篇博客提到的快速排序是排序算法中的一种经典算法.和快速排序一样,合并排序是另外一种经常使用的排序算法.那么合并排序算法有什么不同呢?关键之处就体现在这个合并上面.    合并算法的基本步骤如下所 ...

  6. 获取Object对象的length

    所有JS程序猿(甚至不止JS)都知道,数组(Array)是有length的,通过length属性,可以很方便的获取数组的长度.可以说,只要使用到了数组,就必会使用到其length属性. 而Object ...

  7. linux CentOS部署【minimal 】

    1.为什么选择CentOS不选择其他版本:http://www.cnblogs.com/TeemoHQ/p/6377260.html 2.准备的资源:VMware[官网下载],CentOS镜像 [阿里 ...

  8. Ajax 跨域,这应该是最全的解决方案了

    https://segmentfault.com/a/1190000012469713 前言 从刚接触前端开发起,跨域这个词就一直以很高的频率在身边重复出现,一直到现在,已经调试过N个跨域相关的问题了 ...

  9. WIN2016安装织梦没写入权限怎么办听语音

    配置好了WINSERVER2016环境,一切看起来都弄得差不多了,可是安装织梦的时候提示我没有写入权限,不能继续安装,于是我很郁闷,开始寻求解决办法. 工具/原料 WINSERVER2016 织梦5. ...

  10. IOS开发之UIView总结1

    太长了,请看 http://blog.csdn.net/xdrt81y/article/details/9128695 performSelector: performSelector:withObj ...