红魔咖啡馆

头发越掉越多,头发越掉越少

0%

【CS61A】CS61A——Containers

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}