L[0:3]
表示,从索引0开始取,直到索引3为止,但不包括索引3.如果第一个索引是0,还可以省略L[:3]
L[-2:]
,表示倒数第二个元素到末尾。L[-2:-1]
,表示倒数第二个元素到倒数第一个元素,但不包括倒数第一个元素。L[:10:2]
,前10个数,每两个取一个。L[::5]
,所有数,每5个取一个。L[:]
,原样复制一个list。tuple切片,唯一区别是tuple不可变,操作的结果仍是tuple。 <<< (0,1,2,3,4,5)[:3] (0,1,2)
字符串也可以看成是一种list,每个元素就是一个字符。 <<< 'ABCDEFG'[:3] 'ABC' <<< 'ABCDEFG'[::2] 'ACEG'
for key in d
,如果要迭代value,可以用for value in d.values()
,如果要同时迭代key和value,可以用for k,v in d.items()
for循环,可作用于一个可迭代对象。 <<< from collections import Iterable <<< isinstance('abc',Iterable) # str是否可迭代 True <<< isinstance([1,2,3],Iterable) # list是否可迭代 True <<< isinstance(123,Iterable) # 整数是否可迭代 False
list的下标循环,Python内置的enumerate
函数可以把一个list变成索引-元素对。 <<< for i, value in enumerate(['A','B','C']): PRint(i,value)
list[1,2,3,4,5,6,7,8,9,10]
可以用list(range(1,11))
生成[1×1,2×2,3×3,...,10×10]
<<< x * x for x in range(1,11) if x % 2 == 0
生成全排列 <<< m + n for m in 'ABC' for n in 'XYZ'
列出当前目录下的所有文件和目录名 <<< import os # 导入os模块 <<< [d for d in os.listdir('.')] # os.listdir可以列出文件和目录
使用两个变量来生成list
<<< d = {'x':'A', 'y':'B', 'z':'C'}<<< [k + '=' + v for k, v in d.items()]把一个list中所有的字符串变成小写,如果list中既包含字符串,又包含整数,使用内建的isinstance()函数可以判断一个变量是不是字符串。 <<< L1 = ['Hello','World',18,'Apple',None] <<< L2 = [s.lower() for s in L1 if isinstance(s, str))] print(L2)
<<< L = [x * x for x in range(10)] # L是一个list <<< g = (x * x for x in range(10)) # g是一个generator <<< next(g) # 获得generator的下一个返回值 <<< for n in g: print(n) # generator是可迭代对象
创建复杂generator,用函数实现
# 创建非波拉契数列(Fibonacci)def fib(max): n, a, b = 0, 0, 1 while n<max: yield b a, b = b, a+b n = n + 1 return 'done'# 拿到generator的rerurn语句的返回值<<< g = fib(6)<<< while True: try: x = next(g) print('g:', x) except StopIteration as e: print('Generator return value:', e.value) break <<< from collection import Iterable <<< isinstance([], Iterable) True <<< isinstance({}, Iterable) True <<< isinstance('abc', Iterable) True <<< isinstance((x for x in range(10)), Iterable) True <<< isinstance(100, Iterable) False
可以被next()函数调用并不断返回下一个值的对象成为迭代器:Iterator。 <<< from collections import Iterator <<< isinstance((x for x in range(10)), Iterator) True <<< isinstance([], Iterator) False <<< isinstance({}, Iterator) False <<< isinstance('abc', Iterator) False
生成器都是Iterator对象,但list、dict、str虽然是Iterable对象,却不是Iterator。把list、dict、str等Iterable变成Iterator可以使用iter()函数。 <<< isinstance(iter([]), Iterator) True <<< isinstance(iter('abc'), Iterator) True
Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。Iterator可以表示一个无限大的数据流,如全体自然数,而用list是不可能存储全体自然数。Python的for循环本质上就是通过不断调用next()函数实现的。
for x in [1, 2, 3, 4, 5] pass# 首先获得Iterator对象it = iter([1, 2, 3, 4, 5])# 循环while True: try: # 获得下一个值 x = next(it) except StopIteration: # 遇到StopIteration就退出循环 break新闻热点
疑难解答