P103: Find the K'th element of a list
求列表中第K个元素。用单元测试描述则为:
from python99.lists.p103 import find_kth, find_kth_recursive
def test_find_kth():
input = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
assert find_kth(input, 4) == 'd'
assert find_kth(input, 9) == None
第K个元素也是可以过过位置索引直接访问得。
## find the K'th element of a list. The first element in the list is number 1
def find_kth(list, k):
if len(list) < k:
return None
return list[k-1]
假如给定的数据类型是栈「stack」而非列表,不能通过位置索引随机访问元素,而祇能在栈顶压栈出栈呢?「虽然在Python中没有内建栈类型,要用也都是用列表「list」代替。但我们追求的是逼格对伐!」
没有什么问题是递归解决不了的!
递归的奥义就是:把一个繁杂的问题拆成一个极简单的小问题和一个较小的问题;再把一个较小的问题继续拆分直至一个较小的问题跟一个极简单的问题一样简单;最后把所有极简单小问题的解归结为最终解。
栈是个祇能在栈顶压入元素、取出元素的数据结构。求栈中第K个元素可以拆成1)栈顶元素是不是第K个元素2)求剩余栈中第K-1
个元素。再继续拆分剩余「较小问题」直至K=1
,「较小问题」小到「极简单」。
def find_kth_recursive(l, k):
if k == 1:
return l[0]
return find_kth_recursive(l[1:], k-1)
单元测试:
def test_find_kth_recursive():
input = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
assert find_kth(input, 4) == 'd'
assert find_kth(input, 9) == None