考点整理

 
1、当while    是false时候 else 也执行
 
 
 
 
2.ascii码一共八位,最左边一位是0
3. or 两边都是数字的一些情况         # x or y 如果 x 为真,则值为x,否则为y
 
.

and 两边的一些情况 #x and y 如果 x 为真,则值为y,否则为x

 

四超出范围不报错

 

五:布尔值转化为字符串

 

a = str(2>1)
b = str(True)
print(a,type(a))
print(b)

 

 

六、字符串中一个整体寻找索引

a = 'abcde'
print(a.find('bcdd'))  # 1   当字符串作为一个整体去找索引的时候  匹配第一个字母的索引  不存在就返回-1  index 是报错 

七、输出为空   取值时切片范围不对时候是空

 

 八、什么时候输出none 

 列表修改的过程  

 

 (2)字典中  dic.get[key],如果key不存在,则返回值是None

 

九、请看以下代码:分割转换为列表

 

十:列表的索引是单个元素 列表的切片是列表

li = [1,2,3,4,5,6]

求[6] ;    print(li[-1:])  或者li[7:]   错误:li[-1]

 十一、一行代码实现 a,b 的值反转

b = 2
c = 3
b,c = c,b
print(b,c)  # 3 2

十二、starwith(A' or 'a')  

等同于     此时会先做逻辑运算,结果为‘A’  

 十三:任何数据类型只加一个括号还是本身的数据类型 

  

  注:如果后边加一个逗号,妥妥的是元组

十四:用循环打印 删除  列表中的奇数位索引对应的值

# #删除奇数位索引值
#方一:
a = [1,2,3,4,5,6,7]
del a[1::2]
print(a)
#方法二
a = [1,2,3,4,5,6,7]
a = a[0::2]
print(a)
#方法三(不建议使用此方法,如果有两个相同的元素可能会出错)
a = [1,2,3,4,5,6,7]
b = a.copy()
for i in range(len(b)):
    if i%2==1:
        a.remove(b[i])
print(a)
#方法四
a = [1,2,3,4,5,6,7]
for i in range(0,len(a)):
    if i%2==1:
        del a[(i+1)//2]
print(a)
#方法五
a = [1,2,3,4,5,6,7]
b = []
for i in range(len(a)):
    if i%2 ==0:
        b.append(a[i])
a = b
#方法五
a = [1,2,3,4,5,6,7]
b = []
for i in range(len(a)):
    if i%2 ==0:
        b.append(a[i])
a = b
print(a)'''
e = {1:2,3:4}
e.pop(1)
print(e)

# 方法6
a = [1, 2, 3, 4, 5, 6, 7]
for i in range(len(a)-1,-1,-1):
    if i % 2 == 1:
       del a[i]
print(a)
列表中奇数索引元素删除

 

十五:用循环打印 删除  字典中的key值中包含字符k的键值对

 

 

#删除列表中带K的键值对 l1={'k1':'v1','k2':'v2','k3':'v3','n1':'m1'}
#方法一
l1={'k1':'v1','k2':'v2','k3':'v3','n1':'m1'}
l2 = {}
for i,k in l1.items():
    if 'k' not in i:
        l2[i] = k
l1 = l2
print(l1)
#方法二
l1={'k1':'v1','k2':'v2','k3':'v3','n1':'m1'}
l2 = []
for i in l1:
    if 'k' in i:
        l2.append(i)
for i in l2:
    del l1[i]
print(l1)
#方法三
l1={'k1':'v1','k2':'v2','k3':'v3','n1':'m1'}
l2 = list(l1.keys())
for i in l2:
    if 'k' in i:
        del l1[i]
print(l1)

#方法四
l1={'k1':'v1','k2':'v2','k3':'v3','n1':'m1'}
l2 = l1.copy()
for i in l2:
    if 'k' in i:
        del l1[i]
print(l1)
字典删除

 

 

while True:
                
    for k in dic: # 'k1':'v1', #'y2':'v1', #'k11':'v1'
        if 'k' in k:
        del dic[k]
        break
    break
print(dic)
字典删除

 

dic = {'k1':'v1','age':18,'k2':'v2','k3':9}
while True:
    flag = True
    for i in dic:
        if 'k' in i:
            del dic[i]
            flag = False
            break
    if flag:
        break
print(dic)
dic = {'k1':'v1','age':18,'k2':'v2','k3':9}
while True:
    for i in dic:
        if 'k' in i:
            del dic[i]
            break
    else:
        break
print(dic)
,,

 

 

十六:两个相等数据 在内存中地址相等的范围

第十七:用fromkeys  把列表变为字典 :注意事项,创建的字典的值指向同一地址,一个改变另一个也改变,除非重新赋值

 

 18 判断字典中某个键是否存在,要用in,比get()要好很多 get 的返回值可能就是v

 19.range可以切边

20. 无限循环嵌套

21.面试题:

# 5.以下的代码的输出将是什么: lis1=_[10,'a']___list2 =[123]___list3 = [10,'a']
# def extendList(val,list=[]):
# list.append(val)
# return list
# list1 = extendList(10)
# list2 = extendList(123,[])
# list3 = extendList(‘a’)
# print “list1 = %s”%list1
# print “list2 = %s”%list2
# print “list3 = %s”%list3

22.生成器

def demo():
    for i in range(4):
        yield i

g=demo()

g1=(i for i in g)
g2=(i for i in g1)

print(list(g1))
print(list(g2))
def add(n,i):
    return n+i

def test():
    for i in range(4):
        yield i

g=test()
for n in [1,10]:
    g=(add(n,i) for i in g)

print(list(g))
import os

def init(func):
    def wrapper(*args,**kwargs):
        g=func(*args,**kwargs)
        next(g)
        return g
    return wrapper

@init
def list_files(target):
    while 1:
        dir_to_search=yield
        for top_dir,dir,files in os.walk(dir_to_search):
            for file in files:
                target.send(os.path.join(top_dir,file))
@init
def opener(target):
    while 1:
        file=yield
        fn=open(file)
        target.send((file,fn))
@init
def cat(target):
    while 1:
        file,fn=yield
        for line in fn:
            target.send((file,line))

@init
def grep(pattern,target):
    while 1:
        file,line=yield
        if pattern in line:
            target.send(file)
@init
def printer():
    while 1:
        file=yield
        if file:
            print(file)

g=list_files(opener(cat(grep('python',printer()))))

g.send('/test1')
面试题

 列表推导式,生成器 ,匿名函数混搭

#谈匿名函数与生成器 在列表生成器中变量的取值
# a = ((k for k in range(i)) for i in range(2,5))
# i = 2
# g = [(k for k in range(i))]
# i = 3
# g.append((k for k in range(i)))
# for j in g:
#     print(j)
#     for l in j:
#         print(l)
# range 并不是生成器 所以range(i)一旦生成是固定的。不会变
# < generator object < genexpr > at 0x00000000028D2468 >
# 0
# 1
# < generator object < genexpr > at 0x00000000028D24C0 >
# 0
# 1
# 2
#对比如下
# a = ((k+i for k in range(i)) for i in range(2,5))
# for j in a:
#     print(j)
#     for l in j:
#         print(l)
# < generatorobject < genexpr > at0x0000000002905468 >
# 0
# 1
# < generatorobject < genexpr > at 0x00000000029054C0 >
# 0
# 1
# 2
# < generator object < genexpr >.< genexpr > at 0x0000000002905410 >
# 2
# 3
# < generatorobject < genexpr >.< genexpr > at0x0000000002905570 >
# 3
# 4
# 5
# < generatorobject < genexpr >.< genexpr > at0x0000000002905410 >
# 4
# 5
# 6
# 7
#如果上边换成列表   打印结果将都变成 4 5 6 7


# a = (lambda :i*2 for i in range(4))
# print(a)
# for k in a:
#     print(k())


# 匿名函数和 函数在 列表推导式或者生成器推导式的变量取值
#1.匿名函数
# a = [lambda :i*i for i in range(4)]
# b = (k()  for k in a)
# for j in b:
#     print(j)
# 9 9 9 9
# a = (lambda :i*i for i in range(4))
# b = (k()  for k in a)
# for j in b:
#     print(j)
# 0,1,4,9
#2.函数
b = lambda : i*i
def f1(x):      #函数内的作用域  不能调用另外一个作用域的变量  如果在全部变量则可以调用
    return x*i
i = 0
a = (f1(2) for i in range(1,4))
print(list(a))
# 0,0,0,0
g = (f1 for i in range(1,4))
print(list(g))
#[0,0,0]
View Code

 

 

 

 

posted on 2017-10-20 19:08  心如沚水  阅读(171)  评论(0)    收藏  举报