WWPD部分省略
Q2: Insert Items
实现一个函数,传入列表,一个值before,一个值after,在列表中每个等于before的之后插入after
1 | def insert_items(s, before, after): |
注意:
- 在
before==after时,可能会一直在相同元素后添加相同元素,导致死循环 - 需要在每次相等时手动让idx向后移动一位
- 且需要判断长度防止死循环
Q3: Group By
实现函数,传入列表s与函数fn,返回一个字典
字典的值为s的元素,键为fn(e),且对相同fn(e)的的元素在同一个列表中
1 | def group_by(s, fn): |
遍历s,计算key值,若存在则直接添加到key对应val的列表中,若无则创建列表并填入该值
Q5: Count Occurrences
实现一个函数,传入一个迭代器t,整数n和值x,返回前n个t中和x相等的的数值的个数
注意:在t上调用next n次,确保至少在t中有n个元素
1 | def count_occurrences(t, n, x): |
注意提前跳出循环一次,防止迭代器到尾后返回traceback
Q6: Repeated
实现函数,传入迭代器t与一个大于1的整数k,返回t中第一个连续出现k次的元素
1 | def repeated(t, k): |
一开始想用两个迭代器,但是不会复制
每次调用迭代器的next值,并保存前一个值,每次比较
若前后相同,则计数重复+1,否则还原为1(自身重复一次)
Q7: Sprout Leaves
传入一颗树,与新的叶子节点,使该树延伸出对应叶子节点,通过print_tree输出
如t = tree(1, [tree(2), tree(3, [tree(4)])])
1 | 1 |
调用sprout_leaves(t, [5, 6])后打印出树如下
1 | 1 |
1 | def sprout_leaves(t, leaves): |
Q8: Partial Reverse
实现函数,传入列表s与起始元素start,将start到列表末尾的元素反转
1 | def partial_reverse(s, start): |
使用序列解包,交换两个元素可以通过a,b=b,a实现