[].reverse():反转
reverse([]):反转的迭代器,能保留原序列
l = [1,2,3,4,5]
l.reverse()
print(l)
l = [1,2,3,4,5]
l2 = reversed(l)
print(l2)
# 保留原列表,返回一个反向的迭代器
#输出:
[5, 4, 3, 2, 1]
<list_reverseiterator object at 0x0000000004F8F518>
slice(,):切片规则
l = (1,2,23,213,5612,342,43)
sli = slice(1,5,2)
print(l[sli])
print(l[1:5:2])
#输出:
(2, 213)
(2, 213)
format():可进行进制转换,调整格式
print(format('test', '<20'))
print(format('test', '>40'))
print(format('test', '^40'))
#输出:
test
test
test
bytes(str,encoding=’’).decode(’’):转换编码方式;
我拿到的是gbk编码的,我想转成utf-8编码
print(bytes('你好',encoding='GBK')) # unicode转换成GBK的bytes
print(bytes('你好',encoding='utf-8')) # unicode转换成utf-8的bytes
#输出:
b'\xc4\xe3\xba\xc3'
b'\xe4\xbd\xa0\xe5\xa5\xbd'
网络编程 只能传二进制
照片和视频也是以二进制存储
html网页爬取到的也是编码
b_array = bytearray('你好',encoding='utf-8')#在修改字符串时,可节省空间
print(b_array)
print(b_array[0])
'\xe4\xbd\xa0\xe5\xa5\xbd'
s1 = 'alexa'
s2 = 'alexb'
b=memoryview('\xe4\xbd\xa0\xe5\xa5\xbd',encoding='utf-8')
#输出:
bytearray(b'\xe4\xbd\xa0\xe5\xa5\xbd')
228
切片 —— 字节类型 不占内存
字节 —— 字符串 占内存
l = 'ahfjskjlyhtgeoahwkvnadlnv'
l2 = l[:10]
编码相关的函数
print(ord('好'))#查看字符的编码
print(ord('1'))
print(chr(97))
#输出:
22909
49
a
print(ascii('好'))#如果是ascii的字符就会原封不动打印,如果不是就会打印‘\u……’
print(ascii('1'))
#输出:
'\u597d'
'1'
\r或者repr:保留字符串的单引号
name = 'egg'
print('你好%r'%name)
#输出:
你好'egg'
print(repr('1'))
print(repr(1))
#输出:
'1'
1
可迭代的函数:all/any
all→如列表中有任何的空,都返回False
any→有一个True,就返回True
print(all(['a','',123]))
print(all(['a',123]))
print(all([0,123]))
#输出:
False
True
False
print(any(['',True,0,[]]))
输出:True
拉链函数:zip→返回一个迭代器
l = [1,2,3,4,5]
l2 = ['a','b','c','d']
l3 = ('*','**',[1,2])
d = {'k1':1,'k2':2}
for i in zip(l,l2,l3,d):#zip(可为任何数据类型,任意长度)
print(i)
#输出:
(1, 'a', '*', 'k1')
(2, 'b', '**', 'k2')
可迭代函数:filter/map
filter(func,[])→把[]中每个元素传进func,返回True的值(可用于删除None/空字符串)。执行了filter之后的结果集合<=执行之前的个数,filter只管筛选,不会改变原来的值;
map(func,[])→map执行前后元素个数不变,值可能发生改变。
def is_odd(x):
return(x%2==1)
#相当于[]中的每个元素都传进函数里进行判断,相当于[i for i in [1,3,5,6,7,8] if i%2==1]
for i in filter(is_odd,[1,3,5,6,7,8]):
print(i)
#输出:
1
3
5
7
from math import sqrt
def find(x):
re=sqrt(x)
return(re%1==0)
#开平方为整数的数,如果是整数,会返回float类型,如4.0,4.0%1=0,1.2%1=0.2
for i in filter(find,list(range(100))):#filter执行之后元素个数发生变化,但不会改变原来的值
print(i)
#输出:
0
1
4
9
16
25
36
49
64
81
def find_num(x):
re=sqrt(x)
if re%1==0:
return(x)
else:
pass
for i in map(find_num,list(range(5))):#map执行前后元素个数不变,值可能发生改变
print(i)
#输出:
0
1
None
None
4
排序:sorted/[].sort(key=)
sorted→在列表较小时用,因其会产生新的列表,对愿列表无影响,但占内存
lst.sort(key=)→改变原列表,在原列表的基础上进行排序
l = [1,-4,6,5,-10]
l.sort(key = abs) # 在原列表的基础上进行排序
print(l)→输出:[1, -4, 5, 6, -10]
print(sorted(l,key=abs,reverse=True)) # 生成了一个新列表 不改变原列表 占内存
print(l)
#输出:
[-10, 6, 5, -4, 1]
[1, -4, 5, 6, -10]
l = [' ',[1,2],'hello world']
new_l = sorted(l,key=len)
print(new_l)
#输出:
[[1, 2], ' ', 'hello world']
应用:客户输入一个页码,就输出该页所有的内容,每个页面5行内容
with open('F:/老男孩/分页读取数据.txt') as f:
line_lst=f.readlines()
#print(line_lst)
page_num=int(input('请输入页码:'))
pages,mod=divmod(len(line_lst),5)
if mod==0:
pages=pages
else:
pages=pages+1#总页码数
index_lst=list(range(0,len(line_lst),5))#分页的内容index
if page_num<pages:
print(line_lst[index_lst[page_num-1]:index_lst[page_num]])
elif page_num==pages:
print(line_lst[index_lst[page_num-1]:])
else:
print('输入页码有误,或者超出了页码范围!')