【CS61A】CS61A——Containers

  • 1459 字
  1. 1. Containers
    1. 1.1. Slicing
    2. 1.2. 内置函数
      1. 1.2.1. sum
      2. 1.2.2. max
      3. 1.2.3. all
      4. 1.2.4. len
    3. 1.3. 有关string
      1. 1.3.1. 表示字符串
      2. 1.3.2. string也是一种sequence
    4. 1.4. Dictionary
    5. 1.5. Dictionary Comprehensions

Containers

Slicing

切片可以简洁的获取列表中的子列表,实质是创建了新的列表而不影响原始列表

如列表odds = [3,5,7,9,11]

  • odds[1:3] -> [5,7] 默认也是包括起始值不包括结束值
  • odds[:3] -> [3,5,7] 省略开头将从列表头开始算起
  • odds[1:] -> [5,7,9,11] 省略结尾将覆盖至列表尾

内置函数

sum

sum(<可迭代对象>, [起始值])

返回所有可迭代元素和并加上起始值,起始值默认为0

sum还可以实现列表相加:sum([[2,3],[4]],[]) 注意起始值类型要和前面相同

max

max(<可迭代对象>, [键函数])

max(a,b,c,..., [键函数])

返回对象中的最大值或返回若干值中的最大值

键函数:考虑对每个元素执行键函数并根据返回值比较大小(返回原始值)

e.g. max(range(10), key=lambda x: 7-(x-4)*(x-2))

all

all(<可迭代对象>)

对每个元素执行bool(x)操作,若所有元素都返回True则返回True,否则返回False,空列表返回True

e.g. all([x<5 for x in range(5)]) 返回True

len

len(<可迭代对象>)

获取某个序列长度

有关string

string可以用于表示:数据、语言、程序

表示字符串

  • 使用单引号
  • 使用双引号
  • 使用一对连续的三个双引号:可以跨行

string也是一种sequence

求解长度与选择元素与列表相同

获取到的string中的元素本身也是一个字符串,但只有它本身一个元素

in与not in可以在字符串中寻找连续字符

e.g. 'here' in 'where's waldo? 返回True

Dictionary

dictionary用于存储键值对,使用花括号和冒号分隔键值

创建:

numerals = {'I':1, 'V':5, 'X':10}

可以用数字,字符串当键值,列表或字典 当值

注意:键本身不能是列表或字典,键不能重复

查找:

输入对应的键来查找对应的值,但不能通过值查找键

numerals['V'] >>> 5

遍历:

dictionary是键的序列,通过list()创建列表可以获得所有的键,因此可以用for循环遍历所有的键

使用numerals.value()获得字典中所有的值,存储在一个序列中(非列表)

Dictionary Comprehensions

可以使用表达式来创建列表

格式:{<key exp>: <val exp> for <name> in <iter exp> if <filter exp>}

过程:

  1. 添加以当前作用域为父作用域的新作用域
  2. 建立一个空的result字典存储表达式的值
  3. 对每个中的元素:
    1. 在新作用域中将绑定到每一个元素
    2. 若为真,则将与配对并添加到result字典中

e.g.

{x*x: x for x in [1,2,3,4,5] if x>2} 结果为{9:3, 16:4, 25:3}

赞助喵
非常感谢您的喜欢!
赞助喵