数据运算 列表 字符串 集合 字典
模块
sys
import sys
print(sys.path) #输出相对路径
print(sys.argv) #输出绝对路径
os
import
os
os.system(
"ipconfig"
)
#调用系统dos命令
要使用自己写的模块想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里,用 print(sys.path) 可以查看python环境变量列表
Python的运行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
数据运算
算数运算:
比较运算:
赋值运算:
逻辑运算:
成员运算:
身份运算:
位运算:
#!/usr/bin/python a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a & b; # 12 = 0000 1100 #与 c = a | b; # 61 = 0011 1101 #或 c = a ^ b; # 49 = 0011 0001 #相同为0,不同为1 #异或 c = ~a; # -61 = 1100 0011 #取反 c = a << 2; # 240 = 1111 0000 #左移 ,变大 c = a >> 2; # 15 = 0000 1111 #左移 变小
运算符优先级:
三元运算
result
=
值
1
if
条件
else
值
2
如果条件为真:result = 值1
如果条件为假:result = 值2
如果条件为假:result = 值2
eg:
a,b=2,3
c=a if a>b else c=b
print(c)
c=3
1. 列表、元组操作
列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作
定义列表
names
=
[
'aaa'
,
"bbb"
,
'ccc','1','2'
]
通过下标访问列表中的元素,下标从0开始计数
>>> names[0] 'aaa' >>> names[2] 'ccc' >>> names[-1] 2 >>> names[-2] #倒着取 1
切片
>>> names = ["aaa","bbb","ccc","ddd","eee"] >>> names[1:3] #取下标1至下标3之间的数字,包括1,不包括3 ["bbb","ccc"] >>> names[1:-1] #取下标1至-1的值,不包括-1 ["aaa","bbb","ccc","ddd"] >>> names[0:3] ["aaa","bbb","ccc"] >>> names[:3] #如果是从头开始取,0可以忽略 ["aaa","bbb","ccc"] >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写 ["ddd","eee"] >>> names[3:-1] #这样-1就不会被包含了 ["ddd"] >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个 ["aaa","ccc","eee"] >>> names[::2] #和上句一样 ["aaa","ccc","eee"]
追加
>>> names names = ["aaa","bbb","ccc","ddd","eee"]
>>> names.append("通过追加方法加入的") #默认是追加到最后
>>> names
["aaa","bbb","ccc","ddd","eee","通过追加方法加入的"]
删除
names = ["aaa","bbb","ccc","ddd","eee"] del names #删除整个列表 del names[0] #删除下标为0的元素 names.pop() #默认删除最后一个元素 names.pop('aaa') #删除指定元素 names.renove("bbb") #删除指定元素
插入
names = ["aaa","bbb","ccc","ddd","eee"] names[2]=1 print(names) names = ["aaa","bbb",1,"ddd","eee"]
names.insert('插入的') #默认加入最后一个 names.nisert(0,"强制插入第一个") #从指定位置插入
扩展
>>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy'] >>> b = [1,2,3] >>> names.extend(b) >>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
列表的复制
>>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3] >>> name_copy = names.copy() >>> name_copy ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
通过导入copy模块拷贝
import copy
list1=[1,2,3,4,[1,2,3]]
list2=copy.copy(list1) #浅拷贝
list3=copy.deepcopy(list1) #深拷贝
list1[1]=0
list1[4][0]=0
print(list2)
print(list3)
#[1, 2, 3, 4, [0, 2, 3]]
#[1, 0, 3, 4, [0, 2, 3]]
统计列表中相同的元素
>>> list1=[1,2,3,4,1,3,6,7] >>> print(list1.count(1)) 2
排序,翻转
>>> list1=[1,2,3,4,1,3,6,7] >>> list1.sort() #排序 >>> print(list1) [1, 1, 2, 3, 3, 4, 6, 7] >>> list1.append('aaa') >>> print(list1) [1, 1, 2, 3, 3, 4, 6, 7, 'aaa'] >>> list1.sort() Traceback (most recent call last): File "<stdin>", line 1, in <module> #不同数据类型不能一起比较 TypeError: '<' not supported between instances of 'str' and 'int' >>> list1.pop() 'aaa' >>> list1.reverse() #翻转 >>> print(list1) [7, 6, 4, 3, 3, 2, 1, 1]
获取下标
[7, 6, 4, 3, 3, 2, 1, 1] >>> list1.index(4) 2 >>> list1.index(3) 3
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
它只有2个方法,一个是count,一个是index
字符串操作
特点:不可修改,通常修改了,是重新生成了一个新的,不是在原有基础上修改的
name.capitalize() 首字母大写 name.casefold() 大写全部变小写 name.center(50,"-") 输出 '---------------------Alex Li----------------------' name.count('lex') 统计 lex出现次数 name.encode() 将字符串编码成bytes格式 name.endswith("Li") 判断字符串是否以 Li结尾 "Alex\tLi".expandtabs(10) 输出'Alex Li', 将\t转换成多长的空格 name.find('A') 查找A,找到返回其索引, 找不到返回-1 format : >>> msg = "my name is {}, and age is {}" >>> msg.format("alex",22) 'my name is alex, and age is 22' >>> msg = "my name is {1}, and age is {0}" >>> msg.format("alex",22) 'my name is 22, and age is alex' >>> msg = "my name is {name}, and age is {age}" >>> msg.format(age=22,name="ale") 'my name is ale, and age is 22' format_map >>> msg.format_map({'name':'alex','age':22}) 'my name is alex, and age is 22' msg.index('a') 返回a所在字符串的索引 '9aA'.isalnum() True '9'.isdigit() 是否整数 name.isnumeric name.isprintable name.isspace name.istitle name.isupper "|".join(['alex','jack','rain']) 'alex|jack|rain' maketrans >>> intab = "aeiou" #This is the string having actual characters. >>> outtab = "12345" #This is the string having corresponding mapping character >>> trantab = str.maketrans(intab, outtab) >>> >>> str = "this is string example....wow!!!" >>> str.translate(trantab) 'th3s 3s str3ng 2x1mpl2....w4w!!!' msg.partition('is') 输出 ('my name ', 'is', ' {name}, and age is {age}') >>> "alex li, chinese name is lijie".replace("li","LI",1) 'alex LI, chinese name is lijie' msg.swapcase 大小写互换 >>> msg.zfill(40) '00000my name is {name}, and age is {age}' >>> n4.ljust(40,"-") 'Hello 2orld-----------------------------' >>> n4.rjust(40,"-") '-----------------------------Hello 2orld' >>> b="ddefdsdff_哈哈" >>> b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则 True
字典操作
语法:
info = {
'stu1101': "TengLan Wu",
'stu1102': "LongZe Luola",
'stu1103': "XiaoZe Maliya",
}
字典的特性:
- dict是无序的,so无下标
- key必须是唯一的,so 天生去重
info = { 's1': "zhangsan", 's2': "lisi", 's3': "wangwu", } info['s4']='张三' print(info) #{'s1': 'zhangsan', 's2': 'lisi', 's3': 'wangwu', 's4': '张三'} info['s3']='haha' print(info) #{'s1': 'zhangsan', 's2': 'lisi', 's3': 'haha', 's4': '张三'} #info.clear() #删除整个字典 #copy() info2=info.copy() #浅拷贝 #fromkeys print(dict.fromkeys([3,2,1],'hehe')) #通过一个列表生成默认dict ,不常用 #get 获取key的值,有返回value,否返回none print(info.get("s3")) #item 将字典转成列表,元素以元组方式存储 print(info.items()) #dict_items([('s1', 'zhangsan'), ('s2', 'lisi'), ('s3', 'haha'), ('s4', '张三')]) #获取字典中所有key print(info.keys()) #dict_keys(['s1', 's2', 's3', 's4']) #获取字典中所有value print(info.values()) #dict_values(['zhangsan', 'lisi', 'haha', '张三']) #删除指定值 print(info.pop('s1')) #zhangsan # 随机删除 print(info.popitem()) #setdefault 若key存在,保持值不变,若不存在,添加到字典 info.setdefault('s5','hehe') info.setdefault('s2','hehe') #update 将一个字典添加到另一个字典中 a={8:7,9:5} info.update(a) print(info) #{'s2': 'lisi', 's3': 'haha', 's4': '张三', 's5': 'hehe', 8: 7, 9: 5}
修改key:
dict1={'name':'aaa','age':'23'} dict1['Name']=dict1.pop('name') print(dict1) #{'age': '23', 'Name': 'aaa'}
循环dict
for key in info: print(key,info[key])
集合
集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系
1 >>> a={1,2,3,4,3,6,8,9,1} 2 >>> b={9,0,76,45,3,1,56} 3 >>> print(a.intersection(b)) 交集,返回两个共有的 4 {1, 3, 9} 5 >>> print(a.union(b)) 并集,返回两个集合的值,重复会自动删除 6 {0, 1, 2, 3, 4, 6, 8, 9, 76, 45, 56} 差集 在a不在b 7 >>> print(a.difference(b)) 8 {8, 2, 4, 6} 9 >>> print(b.difference(a)) 10 {0, 56, 76, 45} 11 >>> c={1, 3, 9} 12 >>> print(a.issuperset(c)) 父集 13 True 14 >>> print(c.issubset(a)) 子集 15 True 16 >>> print(c.issubset(b)) 17 True 18 >>> print(a.issubset(c)) 19 False
>>> print(a.symmetric_difference(b)) 对称差集,删除两个集合同时有的
{0, 2, 4, 6, 8, 76, 45, 56}
>>> print(b.symmetric_difference(a))
{0, 2, 4, 6, 8, 76, 45, 56}
set2.add('aaaa') #添加
set3.update([34,45,56]) #添加多个
print(set3) set1.clear() #删除所有