数据类型之基础类型


py2 & py3的区别

py2不支持中文\用的是ascill码 \raw_input的可加可不加括号\xrange

py3 utf8\ input必需加括号\ input\ range\

解释型与编译型的区别

1在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译器

2把每一条语句都编译成机器语言并保存成二进制文件,需要运行时计算机可以直接以机器语言来运行

= :赋值
== : 比较值是否相等
is : 比较的是内存地址
l=[1,3,4]
l1=l
print(id(l),id(l1)
print(l is l1) 返回 T or F

小数据池,为了节省内存
数字 对于小数据池 -5 -- 256 范围内
字符串 不能含有特殊字符创建2 个 *数字>20


字节 是一个单位
字符 看到的一个最小单位
ascii:字母,数字, 一个字节,8位
Unicode: 两个字节,16位 升级4个字节 32位现在用的
utf8 : 最少一个字节 8位 字母一个字节 8位 中文3个字节 24位
gbk: 中文两个字节 英文一个字节
格式化 %占位符 s字符 d

为什么要转换编码
bytes 内部编码是 unicode 形式
表现形式 s = 'alex'
b = s.encode('utf8') 返回bytes类
各个 编码之间的二机制

文件的储存传输是unicode编码

编码 : ascii 显示 英文和特殊字符 》》》unicode 4个字节》》》utf-8 3个字节 GBK 2字节


type(n)查类型

可变与不可变类型的区别

可变类型:list \ dict \set

不可变类型: str \ tuple \ int

不可变类型的变量重新赋值实际上重新创建一个不可变类型的对象并将原来的变量指向它

可变类型的变量赋值后还是会指向同一内存地址如果多个变量指向一个内存地址任一发生改变都会影响另外变量

数据类型:
int
用于计算
i.bit_length() 转换成二进制
int 转换字符 条件是必须是数字

bool
用于判断
b=bool(i) 字符转换
非空 True
空 False
讲到效率 :转换的问题


存储少量的数据便于小的计算
索引 就是序号
s1=s[0]
s1=s[-1] 最后一位
s1=s[-2]

切片 就是取多个 顾头不顾尾
s2=s[0:4]
s3=s[:] 全部
s1=s[::-1]
s1=s[0:5:2] 2 等步长
s1=s[5:0:-1] 倒取

倒取100……0:

for i in range(100,-1,-1):
print(i)


字符串拼接
s1 = s[0]+s[2]+s[1]


字符串的操作 不可变类型 创建新的
n1=n.capitalize() 首字母大写
n2 = n.upper() 全部大写
n3 = n.lower() 全部小写
n4 = n.swapcase() 大小写翻转
n5 = n.title() 多个字符串 首字母大写 空格和特殊符号、数字隔开的
n6 = n.center(20) 设置宽度, 还可以加填充符
n7 = n.expandtabs() \t 补足8位

age = 22
name = 'caroline'
print('{0}{1}'.format('hello','world'))
print('{}{}'.format('hello','world'))
print('{1}{0}{1}'.format('hello','world'))


公共方法:
l = len(s) 长度 中文也是字符
l1 =l.startswith('xxx') 判断是否是以什么开头 默认全部
l1 =l.startswith('e',2,5) 判断是否是以什么开头 在范围内
endswith同上

l2 = l.find(‘kk’) 查找 默认全部 返回下标 通过元素找索引 找不到返回-1
l3.index('n') 和find 一样但找不到会报错
l4.strip() 去空格 在用户输入内容时用到
l5.strip('s') 指定删除
l6.count('n') 指定计数多少个
l7 split('|') 默认空格分隔 可指定分隔符分隔符不存在

format 格式化输出
{}
{0}{1}{2}
{name}{age}{hobby} name=age+hobby

l8.replace('old','new',1) 默认全部替换 指定替换位置

print(name.isalnum()) 字母/数字
print(name.isalpha())是否为英文
print(name.isdigit())是否为数字



if 'sss' in l: 有敏感词
not in 不在


list(存储大量的数据 原来的基础上增加 没有返回会值)
for i in range(len(lis)):
总结:在循环一个列表时,最好不要删除列表中的元素会使索引发生改变,从而报错 要从后往向删则不会影响前面的索引
print(list[0]) 获取第一个
print(list[:3]

增 append insert extend
list.append('xx') 尾部增加在原值上没有返回值
print(li)
list.insert(index,obj) 在指定位置插入 索引,内容
print(li)
list.extend('可迭代类型/每个元素') 迭代的加入
pirnt(li)

循环增加
li = ['skf', 'abc', 123, 'alex']
while 1:
name = input('>>>:').strip()
if name.upper()=='Q':break
else:
li.append(name)
print(li)


删 pop
print(list.pop(index)) 这是有返回值 默认删最后一个
print(li) 这个是删除后的内容
list.remove('xx') 按元素去删除
print(li)
list.clear() 清空列表
print(li)
del list 删除列表 会报错
print(li)
del li[2:] 切片去删除多个
print(li)

list[0] = 'xx' 用索引直接改 找到后覆盖
pirnt(li)

list[0:2] ='xxx' 安迭代去处理 切片去改分开全部元素
print(li)


for 循环 有限 / while 无限循环
可迭代就是有很多内容
for i in l:
print(i)
print(li[0:2]) 返回列表

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

公共方法:
l = len(li)
print(l)
num = li.count('xx')
print(num)

print(li.index(index)) 索引查找 只有index 没有find 未找到会报错

排序: 还有算法排序(思维有难度 )
list.sort() 正序
list.sort(reverse=True) 倒序
print(li)
反转:
list.reverse()
print(li)

列表的嵌套:
print(li[1][1])
li[0] = li[0].capitalize() 大写后替换原来的
print(li)

li[2] = 'hello'
print(li)
li[2]=li[2].replace('昊','日天') 替换放回原位
print(li)

li[3][0] = li[3][0].upper() 大写后放加原位
print(li)


tuple: 如果元组里面只有一个元素且不加逗号 那是什么类型就是什么类型
只读类型 不可更改 可循环查询 可切片
for i in tu:
print(i)
tu[3][2] = tu[3][2].upper() 大写更改
可添加 .append('xx')
print(tu)

n = S.join('可迭代') 返回一个字符串 S 是
print(n)
join 列表转化成字符串 前面.join 加
split 字符串转化成列表 split后面 加

for i in range(0,100)
print(i)
for i in range(0,10,-1)

li = [1,2,3,5,'alex',[2,3,4,5,'taibai'],'afds']
j = li[5]
for i in li:
if type(i)==list:
for k in i:
print(k)
else:print(i)


for i in range(len(li)):

if li[i] == 5:
for j in li[i]:
print(j)
else:
print(li[i])


dict: 不要在循环时删除字典,列表内的元素
dic = dict.fromkeys([1,2,3],'吉林') 分别以前面的每一个以key 来对应后面的值
print(dic)
可以存储大量的 关系型数据 查询速度快
dic['age'] = 21 存在

增:
dic.setdefault('k','v') 没有的话增加 有的话不会覆盖
print(dic)

li = [11,22,33,44,55,66,77,88,99]
result = {}
for i in li:
    result.setdefault('k1',[])
    result.setdefault('k2',[])
    if i > 66:
        result['k1'].append(i)
    else:
        result['k2'].append(i)
print(result)

li = [11,22,33,44,55,66,77,88,99]
result = {}
for i in li:
    if i > 66:
        if 'k1' not in result:
            result['k1'] = []
            result['k1'].append(i)
        else:
            result['k1'].append(i)
    else:
        if 'k2' not in result:
            result['k2'] = []
            result['k2'].append(i)
        else:
            result['k2'].append(i)
print(result)

  

删:

dic1 = dic.pop('k') 按照key删除
clear
del dic['name']没有返回值
dic2=dic.popitem()随机删除 返回元组
改:

dic2={'name':'hone'}

dic2.update(dic) 进行覆盖添加

print(dic2)

查:
v = dic.get('k')

print(v)

dic.keys()
dic.values()
dic.items()

for key,v in items():


set: 可变的类型 里面必须是不可变的类型 无序 不重复
set1 = set({1,2,3})
print(set1)

增:
set1.add('xx') 去重 无序添加
set1.update('abc') 迭代添加

删:
set.pop() 随机删
set.remove('alex') 按元素删 没有会报错
set.clear()
print(set) 清空 返回set()

是不可变类型 所以不能改

查:
for i in set:


求差集 你有对方没有的
print(set-set2)

并集:就是去重(全部显示)
print(set1.union(set2))
print(set1 | set2)
交集:共同都有的
print(set1 & set2)
print(set1.intersection(set2))
反交集:除去共同有的
print(set1^set2)

去重:
set1 = set(li)
print(set1) 返回 集合
li = list(set1)
print(li) 返回列表

set 是可变
s = frozenset('barry") 转换成不可变
print(s,type(s))

深浅拷贝:
浅拷: 从第二层开始共用一个内存
print(li[1] id l1[l2]

深拷贝:完全创建一个新的
imprort copy
l1=copy.eepcopy(l)
print(l1,id(l1))
print(l2,id(l1))

l1 = l.copy()
print(l1,l)
赋值运算 :

flag = True 标志位

for i in li:
print(li.index(i),i)

枚举 括号里是可迭代对象 自动匹配索引 默认0 但可以设置从……开始
for index,i in enumerate(li):
print(i)

三级菜单

menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {},
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}

l = [menu]
while l:
    for k in l[-1]:print(k)
    k = input('>>>:').strip()
    if k in l[-1].keys() and l[-1][k]:l.append(l[-1][k])
    elif k =='b':l.pop()  #椎栈 : 先进后出
    elif k =='q':break
    else:continue
View Code

  递归:


def threelm(dic):
    while True:
        for k in dic:print(k)
        key = input('>>>:').strip()
        if key == 'b'or key == 'q':return key
        elif key in dic.keys() and dic[key]:
            ret = threelm(dic[key])  #内部调用 
            if ret == 'q':return 'q'
threelm(menu)
View Code

优质内容筛选与推荐>>
1、SAE中svn登录失败
2、DOM渲染及过程
3、PHP设计模式
4、dig的安装和使用
5、FPGA 移交代码学习——Map错误 ODDR2 使用问题


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn