数据运算 列表 字符串 集合 字典

模块

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
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() #删除所有

 

posted @ 2017-11-27 20:33  Aline2  阅读(368)  评论(0编辑  收藏  举报