伯克利 CS61A 课堂笔记 08 —— Strings and Dictionaries
本系列为加州伯克利大学著名 Python 基础课程 CS61A 的课堂笔记整理,全英文内容,文末附词汇解释。
目录
01 Strings 字符串
Ⅰ Strings are An Abstraction.
Ⅱ Strings Literals have Three Forms
Ⅲ String are Sequences
02 Dictionaries 字典
03 Dictionary Comprehensions 字典理解
附:词汇解释
01 Strings 字符串
Ⅰ Strings are An Abstraction.
>>> 'curry = lambda f: lambda x: lambda y: f(x, y)'
'curry = lambda f: lambda x: lambda y: f(x, y)'
>>> exec('curry = lambda f: lambda x: lambda y: f(x, y)')
>>> curry
<function <lambda> at 0x1003c1bf8>
>>> from operator import add
>>> curry(add)(3)(4)
7
Ⅱ Strings Literals have Three Forms
>>> 'I am string'
'I am string'
>>> '您好'
'您好'>>> "I've learned a lot from CS61A"
"I've learned a lot from CS61A">>> """The Zen of Python
claims, Readability counts.
Read more: import this."""
'The Zen of Python\nclaims, Readability counts.\nRead more: import this.'
① Single-quoted and double-quoted strings are equivalent.
② A backslash "escapes" the following character.
③ "Line feed" character represents a new line.
Ⅲ String are Sequences
Length and element selection are similar to all sequences.
However, the "in" and "not in" operators match substrings.
When working with strings, we usually care about whole words more than letters.
02 Dictionaries 字典
Dictionaries are collections of key-value pairs.
>>> numerals = {'I': 1, 'V': 5, 'X': 10}
>>> numerals
{'I': 1, 'V': 5, 'X': 10}>>> numerals['I']
1
>>> numerals[0]
Traceback (most recent call last):File "<stdin>", line 1, in <module>
KeyError: 0
>>> numerals['V']
5
>>> numerals['X']
10>>> list(numerals)
['I', 'V', 'X']
>>> numerals.values()
dict_values([1, 5, 10])
>>> list(numerals.values())
[1, 5, 10]
>>> sum(numerals.values())
16>>> {}
{}
>>> {1: {}}
{1: {}}
>>> {1: 'item'}
{1: 'item'}
>>> {1: ['first', 'second'], 3: 'third'}
{1: ['first', 'second'], 3: 'third'}
>>> d = {1: ['first', 'second'], 3: 'third'}
>>> d[1]
['first', 'second']
>>> d[3]
'third'>>> len(d)
2
>>> len(d[1])
2
>>> len(d[3])
5
Dictionary key do have two restrictions.
#Two keys cannot be equal
#There can be at most one value for a given key
>>> {1: 'first', 1: 'second'}
{1: 'second'}#A key of a dictionary cannot be a list or a dictionary(or any mutable type)
#[] or {}
>>> {[1]: 'first'}
Traceback (most recent call last):File "<stdin>", line 1, in <module>
KeyError: unhashable type: 'list'>>> {{}: 'first'}
Traceback (most recent call last):File "<stdin>", line 1, in <module>
KeyError: unhashable type: 'dict'
The first restriction is part of the dictionary abstraction.
The second restriction is tied to Python's underlying implementation of dictionaries.
If you want to associate multiple values with a key, store them all in a sequence value.
03 Dictionary Comprehensions 字典理解
An expression that evaluates to a dictionary using this evaluation procedure:
① Add a new frame with the current frame as its parent.
② Create an empty result dictionary that is the value of the expression.
③ For each element in the iterable value of <iter exp>:
A. Bind <name> to that element in the new frame from step 1.
B. If <filter exp> evaluates to a true value, then add to the result dictionary an entry that
pairs the value of <key exp> to the value of <value exp>.
Example 1: Indexing
def index(keys, values, match):"""Return a dictionary from keys to a list of values for which match(k, v) is a true value.>>> index([7, 9, 11], range(30, 50), lambda k, v: v % k == 0){7: [35, 42, 49], 9: [36, 45], 11: [33, 44]}"""return {k: [v for v in values if match(k, v) for k in keys]}
附:词汇解释
quote / kwoʊt / 引号
single-quote 单引号
double-quote 双引号
equivalent / ɪˈkwɪvələnt / 等同的
habitation 住所
backslash / ˈbækslæʃ / 反斜杠符号
escape / ɪˈskeɪp / 逃跑
mutable / ˈmjuːtəb(ə)l / 可变的
unhashable 不可哈希的
traceback 回溯
underlying 下层的,底层的
pair 配对