python第二周:数据类型、列表、字典

1.模块初识:

sys模块:

                 import sys
                 print(sys.path) 
#path打印环境变量--》 ['F:\\python学习\\projects\\s14\\day2', 'F:\\python学习\\projects\\s14', 'F:\\python3.5\\python35.zip', 'F:\\python3.5\\DLLs', 'F:\\python3.5\\lib', 'F:\\python3.5', 'F:\\python3.5\\lib\\site-packages'] #这些路径存储的是python的环境变量 #其中第三方库模块一般存储在'F:\\python3.5\\lib\\site-packages' 中 #官方标准库模块一般存储在'F:\\python3.5\\lib'中 #当引入模块时,一般是现在当前目录下找,如果找不到再去全局变量中去找 print(sys.argv) #打印当前程序的路径

os模块:

                import os
                cmd_res = os.system("dir") #显示当前文件目录,执行命令不保存结果
                cmd_res = os.popen("dir").read()#os.popen("dir"):将当前文件目 
                #录存储到内存中的一个临时区域, .read()读取这个临时存储的地址,将内容取
                #出来
                print("->",cmd_res)
                os.mkdir("new_dir")#在当前文件目录下在创建一个新的文件目录

2.pyc文件:

随着Java等基于虚拟机语言的兴起,我们不能把语言纯粹的分成解释性和编译性这两种,用Java来举例,Java首先时通过编译器来编译成字节码文件,然后运行是通过解释器来解释机器文件,所以说Java是一门先编译后解释的语言

python和Java、c#一样,也是一门基于虚拟机的语言,当我们在命令行中输入python hello.py时,其实时激活了python的“解释器”,告诉编译器:你要开始工作了。可是在解释之前,其实执行的第一项工作和Java一样:是编译

简述python的运行过程:
pycodeobject文件是python编译器真正编译的结果。当python程序运行时,编译的结果则是位于内存中的pycodeobject中,当python运行结束时,解释器会将pycodeobject写回到pyc文件中。当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则重复上面的过程。所以说pyc文件其实就是pycodeobject的一种持久化保存方式

3.python数据类型:

1.数字:

int (整型)

在32为机器上,整数的位数时32位,取值范围为-2**31--2**31-1
在64位机器上,整数的位数时64位,取值范围为-2**63--2**63-1

long (长整型)(python3之后就没有长整型了)
python的长整数没有指定位宽,即:python没有限制长整数数值的大小,但由于机器的内存有限,我们使用的长整数数值不可能无限大
自python2.2起,如果整数溢出,python会自动将整数数据转化为长整数,所以如今在长整数后面不加字母L也不会导致严重后果了

float (浮点型)
浮点数用来处理实数,即带有小数的数字,类似C语言中的double类型,占8个字节,其中52位表示底,11位表示指数,剩下的一位表示符号

complex (复数)
复数是由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数

附注:python张存在小数字池:-5-127

2.布尔值:

真或假
1或0

3.字符串:
”hello world

python字符串在C语言中体现为是一个字符数组,每次创建字符串的时候需要在内存中开辟一块连续的存储空间,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内存中重新开辟一块空间

入门知识拾遗
1,bytes类型
Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。
你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。

string -encode->bytes-decode->string

字符串可以编码成字节包,而字节包可以解码成字符串。

编码是这个转换过程中至关重要的一部分。离了编码,bytes对象b'\xa420'只是一堆比特位而已。编码赋予其含义。
采用不同的编码,这堆比特位的含义就会大不同。

2.三元运算
result = 值1 if 条件 else 值二

3.进制
二进制,0 1
八进制,0 1 2 3 4 5 6 7
十进制:0 1 2 3 4 5 6 7 8 9
十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F

4.列表:
列表的创建:

names = []

列表的操作:
切片:

names = ["a",'b','c','d']
print(names[0:3]) #a,b,c
print(names[-3:-1]) #b,c
print(names[:]) #a,b,c,d
print(names[0]) #a
print(names[-1]) #d
注意:0可以省略不写

追加:

names = ["a",'b','c']
names.append("Mr Wu")
print(names) #a,b,c,Mr Wu

插入:

names = ['a','b','c']
names.insert(1,"Mr Wu")
print(names) #a,Mr Wu,b,c

修改:

names = ["a",'b','c']
names[0] = "Mr Wu"
print(names) #Mr Wu,b,c

删除:

names = ["a","b","c","d"]
names.remove("a")
print(names) #b,c,d
names.pop(0)
print(names) #b,c,d
del names[0]
print(names) #b,c,d
names.pop()#删除最后一个元素的值
print(names) #a,b,c
del names #删除列表

查找:

names = ["a","b","b","c","d"]
print(names.index("a")) #0;查找元素的位置
print(names.count("b")) #2;查找相同元素的个数

清空:

names = ["sansan","lislis"]

names.clear()

翻转:

names = ["a","b","c","d"]
names.reverse()
print(names) #d,c,b,a

排序:

names.sort()

扩展:

At = ["e","f","g"]
names = ["a","b","c","d"]
names.extend(At)
print(names) #a,b,c,d,e,f,g

浅copy:

import copy
names = ["a","b",["c","d"],"e"]
names2 = names.copy()
#names2 = copy.copy(names)
names[0] = "Mr Wu"
names[2][1] = "alex"
print(names2) #a,b,[alex,d],e
现象原因:names2单独开辟了一块空间存储元素,第一层列表直接把元素值拷贝过来,第二层拷贝的是嵌套列表的地址

深copy:

import copy
names = ["a","b",["c","d"],"e"]
names2 = copy.deepcopy(names)
names[0] = "Mr Wu"
names[2][1] = "alex"
print(names2) #a,b,[c,d],e

循环:
for i in nmaes:
    print(i)

5.字符串:

name = "my name is alex"
print(name.capitalize()) #让首字母大写
print(name.count("a")) #统计字符的个数
print(name.casefold()) #没什么用
print(name.center(50,"-")) #-----------------my name is alex------------------,保证长度为50,不够的两边补-
print(name.encode(encoding = "utf-8"))
print(name.endswith("ex")) #判断一个字符串以什么结尾  True 、False
'''
name = "my \tname is alex"
print(name.expandtabs(tabsize=30))#my                            name is alex
'''
print(name.find("name")) #找到name首字符的位置
print(name[name.find("name"):8]) #切片,此例是取出name
'''
name = "my name is {_name}"
print(name.format(_name = "alex")) #格式化输出
print(name.format_map({"_name":"alex"}))#使用字典时使用这种方法
'''
print("abc123".isalnum()) #判断是否包含阿拉伯数字  True、False
print(name.index("name")) #返回字符串第一个字符的位置
print("abx123".isalpha()) #判断是否为纯英文字符串 True 、False
print("1A".isdecimal()) #判断是否为十进制  True、False
print("12".isdigit()) #判断是否为整数 True、False
print("d1Q".isidentifier()) #判断是不是一个合法的标识符(变量名) True、False
print("Abc".islower()) #判断是否为小写字符串 True、False
print("Abc".isnumeric()) #跟isdigit()用法相同
print("33A".isspace()) #判断是否为空格 True、Falsw
print("My Name Is Alex".istitle()) #判断是否为标题 True、False
print("my name is".isprintable()) #判断是否可以打印(tty file,drive file不可打印)
print("my name is".isupper()) #判断是否为大写字母 True、False
print("my name is".join("=="))#=my name is=
print("+".join(["1","2","3","4"])) #1+2+3+4
print(name.ljust(50,"*")) #my name is alex***********************************,保证长度为50,不够的右边补*
print(name.rjust(50,"-")) #-----------------------------------my name is alex,保证长度为50,不够的左边补-
print(name.lower()) #将大写字符变为小写
print(name.upper()) #将小写字符变为大写
print("\nAlex".lstrip()) #去掉左边的空格和回车
print("=====")
print("alex\n".rstrip()) #去掉右边的空格和回车
print("-----")
print("\nalex\n".strip())# 去掉左边和右边的空格和回车
print("////////")
#随机密码
'''
p = str.maketrans("abcdef","123456") #加密
print("alex li".translate(p)) #解密 #输出1l5x li
'''
print("alex le".replace("l","L",1)) #替换字母  ,aLex le
print("alex li".rfind("l")) #找到最右边的l的位置
print("1+2+3+4".split("+")) #划分成列表 ['1', '2', '3', '4']
print("1+2+3+4".startswith("1"))#判断一个字符串以什么开始  True 、False
print("1+2\n+3+4".splitlines()) #按照换行符划分成列表['1+2', '+3+4']
print("alex li".swapcase()) #把字符串变为大写,ALEX LI
print("alex li".title()) #变为标题,Alex Li
print("alex li".zfill(50))#0000000000000000000000000000000000000000000alex li,保证长度为50,不够的左边补0

#字符串无法修改,只能更新覆盖

#取出字符串中的数字的方法:
products = "Iphone,4000"
number = int(products.split(",")[1])
print(number)

#字符串追加的方法
import random
checkcode = ""
for i in range(5):
    current = random.randrange(5)
    if i == current:
        tm = chr(random.randint(65,90))
    else:
        tm = random.randint(0,9)
    checkcode += str(tm)
print(checkcode)

6.字典:
1.字典的创建:

info = {
                  "stu1101": "TengLan Wu",
                   "stu1102": "LongZe Luola",
                   "stu1103": "XiaoZe Maliya",
          }

单层字典的操作:
1.将字典变成一个列表:

info.items()
print(info)
''' 
#dict_items([("stu1101","TengLan Wu"),("stu1102","LongZe 
LuoLa"),("stu1103","XiaoZe Maliva")])
'''

2.打印所有的values:

print(info.values()) 
#dict_values(["TenLan Wu","LongZe Loula","XiaoZe Maliva"])

3.打印所有的keys:

 print(info.keys()) #dict_keys(["stu1101","stu1102","stu1103"])

4.字典时无序的,因为其没有下标

5.查找value:

print(info["stu1101"]) #TengLan Wu,如果没有则报错
print(info.get("stu1101")) #TengLan Wu,如果没有则返回None

6.修改value:
info["stu1101"] = "Mr Wu"

7.增加:
info["stu1104"] = "Mr Wu"

8.删除:

del info["stu1101"]
info.pop("stu1101")
info.popitem() #随机删除

9.字典的遍历:

for i in info:
    print(i,info[i]) #stu1103 XiaoZe Maliya
'''
#stu1102 LongZe Luola
#stu1101 武藤兰
#stu1104 cangjingkong
建议使用这种方法,其相当于一个迭代器
'''

多层字典嵌套:
1.创建:

1.av_catalog = {
                   "欧美":{
                             "www.youporn.com":["很多免费的,世界最大的","质量一般"],
                              "www.pornhub.com":["很多免费的,也很大","质量比yourorn高点"],
                              "letmedothistoyou":["多是自拍,高质量图片很多","资源不多,更新慢"],
                              "x-art.com":["质量很高,真的很高","全部收费,屌丝请绕路"],
                          },
                    "日韩":{
                              "tokyo-hot":["质量怎么样不清楚,个人已经不喜欢日韩范了","听说是收费的"],
                           },
                    "大陆":{
                              "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
                           },
               }

2,修改:

av_catalog["大陆"]["1024"][1] = "可以在国内左镜像"
av_catalog.get("大陆").get("1024")[1]

3.删除:
del av_catalog["大陆"]["1024"][1]

4.增加

av_catalog.setdefault("taiwan",{"www.baidu.com":["资源少","质量差"]})

posted @ 2018-09-30 19:52  元骑鲸  阅读(459)  评论(0编辑  收藏  举报