python 基础 切片 迭代列表生成式
对list 进行切片 如列表 L = ['Adam','Lisa','Bart','Paul'] L[0:3] ['Adam','Bart'] L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。 即索引0,1,2,正好是3个元素。 如果第一个索引是0,还可以省略: L[:3] ['Adam','Bart'] 切片操作还可以指定第三个参数: L[::2] ['Adam','Bart'] 第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来, 也就是隔一个取一个。 把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple 倒序切片 对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试: L = ['Adam','Paul'] L[-2:] ['Bart','Paul'] L[:-2] ['Adam','Lisa'] L[-3:-1] ['Lisa','Bart'] L[-4:-1:2] ['Adam','Bart'] 对字符串切片 字符串可以进行切片操作,只是操作结果仍是字符串。 'ABCDEFG'[:3] 'ABC' 'ABCDEFG'[-3:] 'EFG' 'ABCDEFG'[::2] 'ACEG' 什么是迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration) 因为 Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。 索引迭代 Python中,迭代永远是取出元素本身,而非元素的索引。 对于有序集合,元素确实是有索引的。有的时候,我们确实想在 for 循环中拿到索引 方法是使用enumerate() 函数: L = ['Adam','Paul'] for index,name in enumerate(L): print index,'_',name 0 - Adam 1 - Lisa 2 - Bart 3 - Paul 迭代dict 的value dict 对象有一个values() 方法,这个方法把dict 转换成一个包含所有values 的list 这样,我们迭代的就是 dict 的没一个value; d = { 'Adam': 95,'Lisa': 85,'Bart': 59 } print d.values() [85,95,59] 还有一个itervalues()方法,用itervalues()方法替代values()方法,迭代效果完全一样 那这两个方法有何不同之处呢? 1.values()方法实际上把一个 dict 转换成了包含 value 的list。 2. 但是itervalues()方法不会转换,它会在迭代过程中依次从 dict 中取出 value, 所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存 迭代dict 的key 和value dict 对象的items()方法返回的值: d = { 'Adam': 95,'Bart': 59 } print d.items() [('Lisa',85),('Adam',95),('Bart',59)] tems() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value: for key,value in d.items(): print key,':',value Lisa : 85 Adam : 95 Bart : 59 生成列表 要生成list [1,2,3,4,5,6,7,8,9,10],我们可以用range(1,11): range(1,11) [1,10] 但如果要生成[1x1,2x2,3x3,...,10x10]怎么做?方法一是循环: L = [] for x in range(1,11): L.append(x * x) [1,16,25,36,49,64,81,100] [x * x for x in range(1,11)] [1,100] 条件过滤 如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选: [x * x for x in range(1,11) if x % 2 == 0] [4,100] 有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。 多层表达式 对于字符串 'ABC' 和 '123',可以使用两层循环,生成全排列: [m + n for m in 'ABC' for n in '123'] ['A1','A2','A3','B1','B2','B3','C1','C2','C3'] 翻译成循环代码就像下面这样: L = [] for m in 'ABC': for n in '123': L.append(m + n) (编辑:鄂州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |