Python学习笔记2(模块,列表,元祖,字典,集合,迭代器,生成器)

模块
标准库 -- 系统自带
第三方库 -- 需要安装,如Django
第三方库安装后自动放在:
C:\Users\xiang\AppData\Local\Programs\Python\Python35\Lib\site-packages
 
sys
os
 
===================
import sys
print(sys.path)
print(sys.argv)
#命令行里输入 python importtest.py 1 2 3
print(sys.argv[2])
===================
import os
os.system("dir")
===================
os.system会立即执行并把结果放到屏幕上

===================
import os

cmd_res = os.system("dir") #直接执行命令,没有保存到变量
print('-->',cmd_res) #输出0表示命令执行成功

cmd_res1= os.popen("dir").read() #执行完会保存到内存,通过read方法取
print('-->',cmd_res1) #输出0表示命令执行成功

os.mkdir("new_dir") #创建一个新的目录

===================
pyc
数据类型
python3里没有长整形了    type(2**64)

三元运算:
a,b,c = 1,3,5
d=a if a>b else c

字符串与二进制互相转换
Python3中Socket网络传输数据时必须把String转成Unicode
msg = '中国'
print(msg.encode())  #Python3自动用utf-8
print(msg.encode(encoding='utf-8'))
print(msg.encode(encoding='utf-8').decode())  #Python3自动用utf-8
print(msg.encode(encoding='utf-8').decode(encoding='utf-8'))

列表(新建,增、删、改、查、切片、排序)
删除列表元素三种方法:
names=['zhangsan','lisi','wangwu','zhaoliu']
names.pop() #方法1,或者带序号如: names.pop(1)
del names[1] #方法2
names.remove('zhangsan') #方法3
获取元素位置: names.index('lisi')
统计重复元素: names.count('lisi')
扩展,把另外一个列表加到当前列表: names.extend(names2)
删除列表: del names
copy()方法是浅拷贝
要完整拷贝的时候先要引入copy模块: 
import copy
names2=copy.deepcopy(names)

深拷贝:原列表改变后,拷贝的列表不变
import copy
child
= [('age','height'),[12,150]]
child1 = copy.deepcopy(child)
print(id(child),id(child1))
print(id(child[0]),id(child1[0]))
print(id(child[1]),id(child1[1]))
print('=======================')
child[0] = ('age','height','weight')
child[1].append(80)
print(id(child),id(child1))
print(id(child[0]),id(child1[0]))
print(id(child[1]),id(child1[1]))
print(child)
print(child1)

list=[1,2,3,4,5]
id(list)
list = list+[6,7,8]
id(list)  #累加操作返回一个新的列表,id不一样(用extend()方法的话id不变)

>>> dict1={'a':1,'b':2}
>>> list4=list(dict1.keys())
>>> list4
['b', 'a']
>>> list5=list(dict1.values())
>>> list5
[2, 1]

Python3中不再有cmp()函数,比较列表时需要先导入operator模块:
import operator
operator.eq(list1,list2)
http://blog.csdn.net/qq_24918869/article/details/52175886

当列表元素是列表时,计算全部列表元素的个数:
#计算列表元素包含列表的全部元素个数,目的,熟悉isinstance() 函数

name = 'zhangsan'
score_1 = [88,90,92]
score_2 = [90,98,89]

score = [name,score_1,score_2]

print(score)

count = 0

len_score = len(score)

i = 0

while(i < len_score):
if(isinstance(score[i],list)):
count += len(score[i])
else:
count += 1
i += 1

print(count)

=====================================

浅copy与深copy
import copy
person = ['name',['a',100]]
#浅copy三种方法
p1 = copy.copy(person)
p2 = person[:]
p3 = list(person)
 
元祖,只能切片,只能查,只读列表
空元祖: tuple1 = ()
只有一个元素的时候,括号内在第一个元素后面要加逗号
>>> tuple1 = ('abc')
>>> type(tuple1)
<class 'str'>
>>> tuple2 = ('edf',)
>>> type(tuple2)
<class 'tuple'>
 
enumerat()方法:遍历列表,并返回下表+元素
list1 = [1,2,3]
for i in enumerate(list1): print(i)
 
字典&集合
key值必须是可以哈希的,可以用hash()函数来判断对象是否可以哈希
一个key可以对应多个value,但只会保存最后一个value
 
字典查找
info= {
'stu1101' : 'zhangsan',
'stu1102' : 'lisi',
'stu1103' : 'wangwu'
}
print(info.get('stu1102'))
有就返回value,没有返回None
 
判断是否在字典
print('stu1107' in info)
key尽量不用中文
 
update()方法,把两个字典合并,有的就更新,没有的就加入到原来那个字典
info= {
'stu1101' : 'zhangsan',
'stu1102' : 'lisi',
'stu1103' : 'wangwu'
}

b = {
'stu1101' : 'alex',
1 : 2,
3 : 4
}

info.update(b)
print(info)
 
用dict.fromkeys()方法初始化一个字典(第一个参数里保存新字典的key,第二参数是这些参数的默认至,不写就是None)
c = dict.fromkeys([6,7,8],'defalut values')
注意:创建后如果改了其中一个key对应的默认值,其他的key对应的默认值也会跟着变,类似浅拷贝
 
字典的循环:
for i in info:
print(i,info[i])

print('==========================')

for k,v in info.items():
print(k,v)
两个方法效果一样,推荐上面的,效率更高
 
字符串操作
.join() 方法
 
格式化字符串,使用.format()方法
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'

迭代器
>>> list1 = [1,2,3,4,5,6]
>>> it = iter(list1)
>>> type(it)
>>> print(next(it))
 
(for循环首先对in关键字后面的对象调用iter函数获取迭代器,在调用迭代器的next()方法获取,捕获stopiteration异常后结束遍历)
myiter = iter('hello')
for i in myiter:
    print(i)
 
判断对象是否可迭代:
>>> from collections import Iterable
>>> isinstance([],Iterable)    #列表
>>> isinstance((),Iterable)    #元组
>>> isinstance({},Iterable)    #字典
 
列表解析:
动态创建列表,在一个序列的值上应用表达式,将其结果收集到一个新的列表并返回
mylist = [x+1 for x in range(10)]
mylist2 = [x+1 for x in range(10) if x > 5]
生成矩阵:
myMatrix = [(x,y,z) for x in range(3) for y in range(3) for z in range(3)]
使用列表解析器统计列表中分数小于60的个数:
[x for x in list1 if x<60]
将列表中小于60的分数替换为False
[x>=60 and x for x in list1]
给定字符串,得到每个字符串中单词及对应长度
str1 = 'welcome to python world'
stuff = [[world,len(world)] for world in str1.split()]
 
生成器:
生成器是列表解析器的一个扩展,返回一个生成器,每次计算出一个条目,把这个条目产生出来,生成器使用延迟算法,在内存上跟有效
生成器创建:L1 = (val for vali in range(20))
生成器访问:L1.next()
列表解析器与生成器表达式区别:
列表解析器需要吧所有条目创建出来
生成器不需要,每次计算的时候才创建

 

集合

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系
#列表去重
list_1 = [1,4,5,7,3,6,7,9]
list_1 = set(list_1)
print(list_1,type(list_1))
for i in list_1: #集合是无序的
print(i)
'''
再把集合转回列表
list_1 = list(list_1)
print(list_1,type(list_1))
'''

list_2 = set([2,6,0,66,22,8,4])
print(list_2)

#取交集
print(list_1.intersection(list_2))
print(list_1 & list_2)

#取并集
print(list_1.union(list_2))
print(list_1 | list_2)

#差集 list_1有,2没有的
print(list_1.difference(list_2))
print(list_1 - list_2)

#子集,父集
print(list_1.issubset(list_2))
print(list_1.issuperset(list_2))
list_3 = set([1,2,3])
list_4 = set([1])
print(list_3.issuperset(list_4))

#对称差集(反向差集),抛去两个里面都有的
print(list_1.symmetric_difference(list_2))
print(list_1 ^ list_2)

print('=====================================')
#如果两个集合没有交集就返回Ture
print(list_2.isdisjoint(list_4))
print(list_1.isdisjoint(list_3))

#添加一项,多项
list_1.add('a')
print(list_1)
list_1.update(['b','c','d'])
print(list_1)

#删除
list_1.remove('a')
print(list_1)
print(list_1.pop())

#长度
print(len(list_1))

#判断是否在集合
print('d' in list_1)
print('a' not in list_1)

#删除,但是不返回
list_1.discard(1)

posted on 2017-03-23 13:39  小温xy  阅读(151)  评论(0)    收藏  举报