第十六天:内置函数的继续:

dic={'name':1,'id':'0','age':2,'phone':3,'job':4}
def get_line(filename):
    #文件读取
    with open(filename,encoding='utf-8')as f:
        for line in f:
            line=line.strip()
            line_str=line.split(',')
            yield line_str
def condition_filter(condition):
    #调剂筛选
    condition=condition.strip()
    if '>' in condition:
        col,val=condition.split('>')
        g=get_line('userinfo')
        for line_list in g:
            if int(line_list[dic[col]])>int(val):
                yield line_list
def view(view_lst,staff_g):
    #展示符合条件的员工
    for staff_info in staff_g:
        info=[]
        for i in view_lst:
            print(staff_info[dic[i]],end='')
        print('')
ret='select name,age where age>22'
view,condition=ret.split('where')
print(view,condition)
view=view.replace('select','').strip()
view_lst=view.split(',')
print(view_lst,condition)
View Code

 

1.和数据结构相关的序列:

 

   1.1reversed对列表进行反转(次操作不会该改变原列表,而且生成一个新的迭代器)

l=[1,4,6,8,9]
l1=l.reverse() #列表里的反转没有返回值
print(l1,l) #列表里的反转会改变原来的数据
结果为
None [9, 8, 6, 4, 1]
View Code
l=[1,4,6,8,9]
l1=reversed(l) #反转有返回值返回一个迭代器 如果返回为一个内存地址则为迭代器
print(l1,l) #列表里的反转会不会改变原来的数据
print(list(l1))
结果为
<list_reverseiterator object at 0x000001DEBE75B080> [1, 4, 6, 8, 9]
[9, 8, 6, 4, 1]
View Code

  1.2slice对可迭代对象进行切片得到是切片的范围

l=[1,4,6,8,9]
li=slice(1,3)
print(l[li])
print(l[1:3])
结果为
[4, 6]
[4, 6]
View Code

  1.3format前面学习了3种format格式化的方式,现在补充一种:

print(format('test', '>20'))#开辟20个内存空间字符串再最右边
print(format('test', '<20'))#开辟20个内存空间字符串再最左边
print(format('test', '^20'))#开辟20个内存空间字符串再最中间边
结果为
                test
test                
        test        
View Code

·  1.4bytes   将内容的类型转换成bytes类型

列:我拿到的是gbk编码的,我想转成utf-8编码:

print(bytes('你好',encoding='utf-8')) #因为内存种默认编码方式是unicode次操作是将unicode转为utf-8的bytes
print(bytes('你好',encoding='gbk')) #因为内存种默认编码方式是unicode次操作是将unicode转为gbk的bytes
结果为
b'\xe4\xbd\xa0\xe5\xa5\xbd'
b'\xc4\xe3\xba\xc3'
View Code

  1,我拿到的是gbk类型的数据,像转换成utf-8类型的进行的操作为

 

   1.5bytearray(得到的二进制放入类表中,并且可以操作:)注:网络编程中只能传二进制,照片和视频也是只能以二进制来进行存储,html网页爬取是也是要编码方式的:

b_array=bytearray('你好',encoding='utf-8')
print(b_array)
print(b_array.decode('utf-8'))  #进行解码操作
print(b_array[1])
print(b_array[0:3].decode('utf-8')) #可以读取字符串中想要读取的字符
print(b_array[1]+1)
结果为
bytearray(b'\xe4\xbd\xa0\xe5\xa5\xbd')
你好
189190
View Code

   1.6怎么将s1='alexa'变成s2=alexb

s1='alexa'
byte1=bytearray(s1,encoding='utf-8')
print(byte1)
byte1[-1]=byte1[-1]+1
print(byte1[-1])
s2=byte1
print(s2.decode('utf-8'))
结果为
bytearray(b'alexa')
98
alexb
View Code

  1.7ord将字符串转换成数字:

print(ord(''))
print(ord('1'))
结果为
22909
49
View Code

  1.8将字母转换成数字:输入的数字范围为65到122:

print(chr(65))
print(chr(122))
结果为
A
z
View Code

  1.9repr数据类型原样输去:

name='egg'  
print('你好%r'%name)  #name把字符串的字符串数据类型也会改变
print('你好%s'%name)  
print(repr('1'))   #此数据类型为字符串输出也为字符串
print(repr(1))
结果为
C:\pycharm\python.exe D:/python练习程序/第十五天/内置函数.py
你好'egg'
你好egg
'1'
1
View Code

  。1.10 len计算某个变量的长度:

name='fjkdjfkj'
print(len(name))
结果为
8
View Code

  1.11all  (如果迭代对象中有一个为False,则返回False,否则返回True)

print(all(['','jfkdj']))
print(all(['f','jfkdj']))
结果为
False
True
View Code

  1.12 any 如果可迭代对象中有一个为True,则返回为True

print(any(['','jfkdj']))
print(any(['',None]))
结果为
True
False
View Code

  1.13zip函数将几个可迭代的对象的所有相同的索引值放在同一个元组中:如果里面包含字典则只取字典的key值(而且遵循最少迭代对象里面元素的原则)

l=[1,2,4,5,6]
l2=['1','2','4','a']
print(list(zip(l,l2)))
结果为
[(1, '1'), (2, '2'), (4, '4'), (5, 'a')]
View Code 
l=[1,2,4,5,6]
l2=['1','2','4','a']
dic={'nam3':'fjj','fjkf':'jfkj'}
print(list(zip(l,l2,dic)))
结果为
[(1, '1', 'nam3'), (2, '2', 'fjkf')]
View Code

  1.14filter其主要功能时进行筛选:不会改变原来函数的值,但是执行之后元素的个数会小于等于原来的:

def is_odd(x):
    return x%2
ret=filter(is_odd,[1,4,6,7,9,33])  #如果函数里结果为True,才会有返回值
print(ret)  #得到的是一个迭代器
print(list(ret))
结果为
<filter object at 0x000001B2C4A390B8>
[1, 7, 9, 33]
View Code

  1.15map  执行前后元素的个发生改变但是值有可能不会边:

l=[1,-4,6,-7,9,33]
ret=map(abs,l)#对函数里每一个元素进行前面函数的操作,才会有返回值
print(ret)#得到的是一个迭代器
print(list(ret))
结果为
<map object at 0x0000021B69A99278>
[1, 4, 6, 7, 9, 33]
View Code

  1.16sorted:对列表里的元素进行排序,而且生成一个列表不会生成一个迭代器,但是不会改变原来数据:

l=[1,-4,6,-7,9,33]
l1=l.sort() #列表里的排序没有返回值
print(l,l1)#列表里的反转会改变原来的数据
结果为
[-7, -4, 1, 6, 9, 33] None
View Code
l=[1,-4,6,-7,9,33]
l1=sorted(l) #列表里的排序没有返回值
print(l)#列表里的反转不会改变原来的数据
print(l1)#会生成一个新的列表
结果为
[1, -4, 6, -7, 9, 33]
[-7, -4, 1, 6, 9, 33]
View Code

  再排序的过程中可以指定key(指定排序的类型)和reversed进行从大小的排序

l=[1,-4,6,-7,9,33]
l1=sorted(l,key=abs,reverse=True) #列表里的排序没有返回值
print(l)#列表里的反转不会改变原来的数据
print(l1)#会生成一个新的列表
结果为
[1, -4, 6, -7, 9, 33]
[33, 9, -7, 6, -4, 1]
View Code

  以字符串的长度来进行排序l=[' ',[1,4],'hello','fjkljdflj']

l=['  ',[1,4],'hello','fjkljdflj']
ret=sorted(l,key=len)
print(ret)
结果为
['  ', [1, 4], 'hello', 'fjkljdflj']
View Code

3.匿名函数:lambd  公式:函数名=lambda 参数:返回值

def add(x,y):
    return x+y
ret=add(1,3)
print(ret)
add1=lambda x,y:x+y
ret=add1(1,3)
print(ret)
结果为
4
4
View Code

4.计算字典中value值最大的key

dic={'k1':10,'k2':324,'k3':56}
def func(key):
    return dic[key]
print(max(dic,key=func))
结果为
k2
View Code
print(max(dic,key=lambda key:dic[key]))
结果为
k2
View Code

求列表的里每个元素的平方:

ret=map(lambda x:x**2,[-1,3,-4,6])
print(list(ret))
结果为
[1, 9, 16, 36]
View Code

求列表里大于10的元素:

l=[4,6,88,99,3]
ret=filter(lambda x:x>10,l)
print(list(ret))
结果为
[88, 99]
View Code

12. min max filter map sorted —— lambda

13.计算下个函数的输出结果

d=lambda p:p*2
t=lambda p:p*3
x=2
x=d(x)
x=t(x)
x=d(x)
print(x)
结果
24
View Code

14.现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

s1=(('a'),('b'))
s2=(('c'),('d'))
s3=zip(s1,s2)  #进行拉链操作把两个函数相对应的索引值放到一起
ret=map(lambda t:{t[0]:t[1]},s3)  
print(list(ret))
结果为
[{'a': 'c'}, {'b': 'd'}]
View Code

15。

def multipliers():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])
结果为
[6, 6, 6, 6]
View Code

 

posted @ 2020-02-17 17:08  chown  阅读(187)  评论(0编辑  收藏  举报