切片

对有序序列中取指定范围索引的操作,python 提供了切片(slice)操作符,语法:list[start,end,seq]

  • 元组 tuple ,字符串 str 也支持切片操作

    1. if __name__ == '__main__':
    2. # 生成一个列表
    3. ints = [i for i in range(0, 20)]
    4. # 获取索引为 [0,10) 的元素
    5. # 索引为 0 时可以省略不写
    6. print(ints[:10]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    7. # 获取倒数第一个元素
    8. print(ints[-1]) # 19
    9. # 获取倒数的三个元素
    10. print(ints[-3:]) # [17, 18, 19]
    11. # 获取 [-3,-1) 的元素
    12. print(ints[-3:-1]) # [17, 18]
    13. # 获取前5个数
    14. print(ints[:5])
    15. # 获取后5个数
    16. print(ints[-5:])
    17. # 每隔2个取一个
    18. print(ints[::2])
    19. # 原样复制
    20. new_list = ints[:]

迭代

python中,list、tuple、str、dict 都可以通过 for 循环进行遍历,称为迭代

  • enumerate():可以将序列变成“索引-元素对”,这样在 for 循环中同时迭代索引和元素本身

    1. if __name__ == '__main__':
    2. # 遍历list:带索引
    3. names = ['Bob', 'Lily', 'Candy']
    4. for index, val in enumerate(names):
    5. print("index:%s \t value:%s" % (index, val))
    6. # 遍历元组tuple:带索引
    7. names = ('Bob', 'Lily', 'Cindy')
    8. for index, val in enumerate(names):
    9. print("index:%s \t value:%s" % (index, val))
    10. # 遍历字符串str
    11. names = '世界,您好'
    12. for index, val in enumerate(names):
    13. print("index:%s \t value:%s" % (index, val))
    14. # 遍历 dict
    15. names = {"name": "Bob", "age": 18}
    16. for key in names: # dict 默认迭代的是 key
    17. print(key)
    18. for val in names.values(): # 遍历 dict 的value
    19. print(val)
    20. for key, val in names.items(): # 同时遍历key和value
    21. print(key, val)

    判断一个对象是否是可迭代对象:collections 模块的 Iterable 类型 ```python from collections import Iterable

l = [] b = isinstance(l , Iterable) # 判断 l 是否是可迭代对象

  1. 在遍历时可以进行解包操作:
  2. ```python
  3. if __name__ == '__main__':
  4. names = [(2, 3, 4), (1, 2, 3)]
  5. for x, y, z in names:
  6. print(x, y, z)
  7. # 输出
  8. 2 3 4
  9. 1 2 3

列表生成器

列表生成器,List Comprehensions,是 python 内置的非常简单却强大的可以用来创建 list 的生成器

  1. >>> list(range(1,11,2))
  2. [1, 3, 5, 7, 9]
  3. >>> [x * x for x in range(1,11,2)]
  4. [1, 9, 25, 49, 81]
  5. # 对for循环中生成 x 的只进行判断:if在for语句后面,属于筛选条件,所以不可以加 else
  6. >>> [x * x for x in range(1,11,2) if x % 3 == 0]
  7. [9, 81]
  8. # for循环前面是一个表达式,属于根据 x 计算出一个结果,所以必须加 else 语句
  9. >>> [x * x if x % 2 == 0 else 2 * x for x in range(20) if x > 10]
  10. [22, 144, 26, 196, 30, 256, 34, 324, 38]
  11. # 解释:for x in range(20) if x > 10 先是获得一个range(20)的序列,然后筛选其中大于10的
  12. # x * x if x % 2 == 0 else 2 * x 从后面获得的序列中如果为偶数,则为x的平方;否则为2x