大家好,给大家分享一下初中信息技术python编程教学视频,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!
一、对迭代器进行切片
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from itertools import islice
#islice(iterable, [start,] stop [, step]) 语法
f = open('/var/log/messages','r')
l = islice(f,100,300) #从100切到300
ll = islice(f,100,None) #从100切到最后
lll = islice(f,500) #从开头切到500
备注:如果从中间切片,会对前面的数据造成影响
二、反向迭代以及如何实现反向迭代
#!/usr/bin/env python
#-*- coding:utf-8 -*-
l = [1,2,3,4,5,6]
reversed(l) #主要是调用 __reversed__ 方法
class Floatrange(object):
def __init__(self,start,end,step):
self.start = start
self.end = end
self.step = step
def __iter__(self):
t = self.start
while t < self.end:
yield t
t += self.step
def __reversed__(self):
t = self.end
while t > self.start:
yield t
t -= self.step
#调用
aa = Floatrange(1.0,4.0,0.5)
for i in aa: #正向
print(i)
print(''.center(20,'='))
for x in reversed(aa): #反向
print(x)
三、在一个for循环中迭代多个对象
1、并行(zip函数,它能将多个可迭代对象合并,每次迭代返回一个元组)
例如: 统计每个学生成绩(语文、数学、英语)总和
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from random import randint
#随机生成语文数学英语成绩,以每个班30人为例
chinese = [randint(60,100) for _ in range(30)]
math = [randint(60,100) for _ in range(30)]
english = [randint(60,100) for _ in range(30)]
total = []
for c,m,e in zip(chinese,math,english):
total.append(c+m+e)
print(total)
备注:zip[chinese,math,english]后面加可迭代对象就会生成新的可迭代对象,形式如下[(1,2,3),(),()…]
2、串行(itertools._chain函数,它能将多个迭代对象连接)
例如: 某年级有3个班,每次考试的语文成绩分别存储在3个表中,依次迭代每个列表,统计成绩高于90的人数。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from random import randint
from collections import _chain #在python2.7种是(from collections import chain)
t1 = [randint(60,100) for _ in range(30)]
t2 = [randint(60,100) for _ in range(42)]
t3 = [randint(60,100) for _ in range(36)]
count = 0
for x in _chain(t1,t2,t3):
if x > 90:
count += 1
print(count)
四、统计出现频率比较高的三个元素
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from collections import Counter
from random import randint
data = [randint(0,20) for _ in range(30)]
#方法一:通过字典的key进行判断
# dic = dict.fromkeys(data,0)
# for x in data:
# dic[x] += 1
# print(dic)
#方法二:调用collections 标准库里面的Counter方法
c1 = Counter(data)
a = c1.most_common(3)
print(a)
五、对字典的值values进行排序
思路:先将zip函数将字典的key和value反转,然后对新key(也就是value)进行排序即可
思路2:利用内置函数sorted
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from random import randint
d = {x: randint(60,100) for x in 'abegxg'}
t = zip(d.values(),d.keys()) #zip函数将字典的key和value反转,然后再进行排序
print(sorted(d.items(),key=lambda x:x[1])) #内置函数
六、取字典里面的公共key
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from random import randint,sample
sample('abcderg',randint(3,6)) #随机取样sample,从'abcderg'中随机取出三到六个不等的字符串
s1 = {x:randint(1,4) for x in sample('abcderg',randint(3,6))}
s2 = {x:randint(1,4) for x in sample('abcderg',randint(3,6))}
s3 = {x:randint(1,4) for x in sample('abcderg',randint(3,6))}
解决方法思路:
①使用字典的viewkeys() 放大,得到一个自定keys的集合
②使用map函数,得到所有字典的keys的集合
③使用reduce函数,取得所有字典的keys的集合的交集
#方法一:
#将字典1的key循环,然后判断字典2和字典3中是否有
res = []
for k in s1:
if k in s2 and k in s3:
res.append(k)
print(res)
#方法二:
#字典viewkeys()方法,在python3里面变成(from collections import _OrderedDictKeysView)
s1.viewkeys() & s2.viewkeys() & s3.viewkeys()
#方法三:利用reduce函数
reduce(lambda a,b : a & b,map(dict.viewkeys,[s1,s2,s3])) #这个只针对python2有用
七、历史记录命令
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from collections import deque
q = deque([],5) #创建容量为5的队列,如果队列里面的值超过五个,就会自动把前面的剔除
q.append('a')
八、字符串的操作
1、以什么开头,什么结尾,多个匹配时参数用元组
ss = 'abcedfg'
ss.startswith('a')
ss.endswith('b')
#或者
[name for name in os.listdir('.') if name.endswith(('.txt','.py'))] #以.txt和.py结尾
2、字符串分割
re.split(r'[\t,./:_;|" "]+',ss) #一次性分割完成
ss.split('\t') --> t = [] & map(lambda x : t.append(x.split(',')),ss.split('\t')) #只能一次次来
3、调整字符串日期的格式
将日期格式调整:‘2017-05-23 ==> 05/23/2017’
思路:使用正则re.sub()做替换,利用正则表达式捕获组,捕获每个部分内容,在替换字符串中调整各个捕获组的顺序
#!/usr/bin/env python
#-*- coding:utf-8 -*-
log = open('/var/log/messages','r').read()
print re.sub('(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1',log) #()为捕获组
#print re.sub('(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})',r'\g<month>/\g<day>/\g<year>',log) #给捕获组起名字,后面直接用名字调用
4、字符串拼接
①''.join() #join里面添加一个可迭代对象,前面是分隔符
② + 号 #这个慎用
#如果一个列表中既有字符串,又有整型,应将整型转化为字符串
ll = ['abc',12,459,'xyz']
'-'.join(str(x) for x in ll) #(str(x) for x in ll) #这样就变成了一个生成器对象
5、字符串的左,右,居中对齐
str.ljust()
str.rjust()
str.center()
max(map(len,aaa.keys())) #查看每一个key的长度
format() '<20' '>20' '^20' #左右居中对齐
例子:
s = 'abc'
s.ljust(20) #'abc '
s.ljust(20,'=') #'abc================='
format(s,'<20') #左对齐
format(s,'>20') #右对齐
format(s,'^20') #居中
九、导出一个项目用到的模块
#进入到该项目目录下,执行一下命令
pip freeze > requirement.txt
#结果
aiohttp==3.4.4
amqp==2.3.2
asn1crypto==0.24.0
async-timeout==3.0.1
asyncio==3.4.3
attrs==18.2.0
Automat==0.7.0
baidu==0.2
baidu-aip==2.2.10.0
beautifulsoup4==4.6.3
billiard==3.5.0.4
celery==4.2.1
certifi==2018.10.15
cffi==1.11.5
chardet==3.0.4
constantly==15.1.0
cryptography==2.4.2
cssselect==1.0.3
cycler==0.10.0
Django==2.1.5
gevent==1.3.7
greenlet==0.4.15
hyperlink==18.0.0
idna==2.7
idna-ssl==1.1.0
incremental==17.5.0
jieba==0.39
kiwisolver==1.0.1
kombu==4.2.1
lxml==4.2.5
matplotlib==3.0.2
multidict==4.4.2
nose==1.3.7
numpy==1.15.4
pandas==0.23.4
parsel==1.5.1
Pillow==5.3.0
pyasn1==0.4.4
pyasn1-modules==0.2.2
pycparser==2.19
PyDispatcher==2.0.5
PyHamcrest==1.9.0
pymongo==3.7.2
PyMySQL==0.9.3
pyOpenSSL==18.0.0
pyparsing==2.3.0
pyquery==1.4.0
python-dateutil==2.7.5
pytz==2018.7
pywin32==224
queuelib==1.5.0
redis==3.2.1
requests==2.20.1
Scrapy==1.5.1
scrapy-redis==0.6.8
selenium==3.14.1
service-identity==18.1.0
six==1.11.0
SQLAlchemy==1.2.15
style==1.1.0
Twisted==18.9.0
update==0.0.1
urllib3==1.23
vine==1.1.4
w3lib==1.19.0
wordcloud==1.5.0
xlrd==1.2.0
xlwt==1.3.0
yarl==1.2.6
zope.interface==4.6.0