–
切片 L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] print (L) print (L[:3]) print (L[-2:-1]) L = list (range(100)) 从第10个元素开始,包括第10个元素,到第20个元素,不包括第20个元素 print (L[10:20]) 从刚开始到第10个元素,不包括第10个元素,步进为2 print (L[:10:2]) print (L[::5]) L = (0,1,2,3,4,5) print (L[:3]) a = 'abcdef'[:3] print (a) ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] ['Michael', 'Sarah', 'Tracy'] ['Bob'] [10, 11, 12, 13, 14, 15, 16, 17, 18, 19] [0, 2, 4, 6, 8] [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95] (0, 1, 2) abc 列表生成,Python内置的非常简单却强大的可以用来创建list的生成式 list(range(1, 11)) [x * x for x in range(1, 11)] #将模块内的内容放到前面去了 [x * x for x in range(1, 11) if x % 2 == 0] #先执行后面的if,在执行前面的相乘 迭代 字典迭代 默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items() d = {'a':1, 'b':2, 'c':3} print(d.values()) print(d.items()) for i in d: print(i) 结果: dict_values([1, 2, 3]) dict_items([('a', 1), ('b', 2), ('c', 3)]) a b c 字符串迭代 >>> for ch in 'ABC': ... print(ch) ... A B C 判断是否为可迭代对象 >>> from collections import Iterable >>> isinstance('abc', Iterable) # str是否可迭代 True >>> isinstance([1,2,3], Iterable) # list是否可迭代 True >>> isinstance(123, Iterable) # 整数是否可迭代 False 列出当前目录下的所有文件和目录名,赋值给list dir = [d for d in os.listdir('.')] 多个参数进行计算 d = {'x': 'A', 'y': 'B', 'z': 'C' } [k + '=' + v for k, v in d.items()] ['y=B', 'x=A', 'z=C'] 用内建的isinstance函数可以判断一个变量是不是字符串: >>> x = 'abc' >>> y = 123 >>> isinstance(x, str) True >>> isinstance(y, str) False 生成器:在循环的过程中不断推算出后续的元素,不必创建完整的list,从而节省大量的空间 只要把一个列表生成式的[]改成(),就创建了一个generator generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值 generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值 g = (x*x for x in range(10)) >>> for n in g: ... print(n) 0 1 4 9 16 25 36 49 64 81 注意,赋值语句: a, b = b, a + b 相当于: t = (b, a + b) # t是一个tuple a = t[0] b = t[1] 下面是正确的方式,也是迭代对象 g = (x*x for x in range(10)) for n in g: print (n) 下面也是生成器 def fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return 'done' f = fib(6) f <generator object fib at 0x104feaaa0> 下面的函数只要有yield,就是一个生成器 def odd(): print ('step1') yield 1 print('step2') yield 2 print ('step3') yield 3 for i in odd(): print (i) print ('='*10) step1 1 ========== step2 2 ========== step3 3 ========== 请注意区分普通函数和generator函数,普通函数调用直接返回结果: >>> r = abs(6) >>> r 6 generator函数的“调用”实际返回一个generator对象: >>> g = fib(6) >>> g <generator object fib at 0x1022ef948>
–
评论前必须登录!
注册