python 基础 切片 迭代 列表生成式

对list 进行切片

  如列表

    L = ['Adam', 'Lisa', 'Bart', 'Paul']

    L[0:3]

    ['Adam', 'Lisa', 'Bart']

    L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。

    即索引0,1,2,正好是3个元素。

  如果第一个索引是0,还可以省略:

    L[:3]

    ['Adam', 'Lisa', 'Bart']

    切片操作还可以指定第三个参数:

      L[::2]

      ['Adam', 'Bart']

      第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,

      也就是隔一个取一个。

      把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple

  倒序切片

    对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:

      L = ['Adam', 'Lisa', 'Bart', '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', 'Lisa', 'Bart', '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, 'Lisa': 85, '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, 2, 3, 4, 5, 6, 7, 8, 9, 10]

        但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:

        L = []

        for x in range(1, 11):

        L.append(x * x)

        [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

        [x * x for x in range(1, 11)]

        [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    条件过滤

      如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:

        [x * x for x in range(1, 11) if x % 2 == 0]

        [4, 16, 36, 64, 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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏chenjx85的技术专栏

leetcode-36-有效的数独

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

922
来自专栏GreenLeaves

字符、字符串和文本的处理之Char类型

1952
来自专栏和蔼的张星的图像处理专栏

156. 合并区间先排序再处理

给出若干闭合区间,合并所有重叠的部分。 样例 给出的区间列表 => 合并后的区间列表:

1833
来自专栏Golang语言社区

Golang语言社区--【基础知识】常量

常量是指该程序可能无法在其执行期间改变的固定值。这些固定值也被称为文字。 常量可以是任何像一个整型常量,一个浮点常量,字符常量或字符串文字的基本数据类型。还有枚...

3627
来自专栏一“技”之长

经典排序算法解析 原

    许多高级语言中都提供有排序函数,但是掌握一些经典排序算法的基本原理和编码方法还是很有必要,这个学习过程可以帮助我们更好的理解每种排序算法的设计思路,本篇...

861
来自专栏武培轩的专栏

排序算法-冒泡排序

算法简介 冒泡排序(Bubble Sort)是一种典型的交换排序算法,持续比较相邻元素,大的挪到后面,因此大的会逐步往后挪,故称之为冒泡。 算法描述 比较相邻的...

3507
来自专栏企鹅号快讯

SQL笔记

表达式:表达式的定义非常简单 表达式可以返回一个值 表达式的类型非常广泛 它以包括各种 类型的数据如数字字符以逻辑型等其实在下列子句 如 SELECT 和 FR...

2066
来自专栏柠檬先生

Python基础 List和Tuple类型

python 创建list     python 内置一种数据类型是列表: 列表是一种有序的集合,可以随时添加和     删除其中的元素,list 中的元素是按...

3486
来自专栏mathor

位与进制

 这里我假设读者有二进制的思维,知道(3)~10~=(011)~2~将十进制转换为二进制的方法

571
来自专栏蓝天

彻底理解C/C++指针

彻底理解C++指针.pdf 推荐阅读pdf版本,原因是从WPS复制粘贴到ChinaUnix后格式有些丢了。

971

扫码关注云+社区

领取腾讯云代金券