第一章 引言
#倒序输出
count = 10
nums = []
for i in range(count): #由小到大开始整数计数,默认从0开始
nums.append(i) #添加,添加到末尾
nums.reverse() #反转
print(nums)
#-----------------------------------------------------------
count = 10
nums = []
for i in range(count):
nums.insert(0, i) #插入,将i插入到第0个位置/首位
print(nums)
第一段代码效率会更高
习题1-2
判断字符变位,例如debit card和bad credit
解答:变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词。aabbdd和abccab就是一对变位词。
利用collections.Counter
from collections import Counter
num1 = []
num2 = []
word1 = 'debit card'
word2 = 'bad credit'
for i1 in word1:
nums1 += i1
for i2 in word2:
nums2 += i2
c = Counter(nums1) #计数功能,返回字典形式
d = Counter(nums2)
if c == d:
print(True)
else:
print(False)
第二章 基础知识
黑盒子专栏之list
python列表:数组——它不是由若干个独立的节点相互引用而成的,而是一整块单一连续的内存区块。可直接计算出目标元素在内存中的位置。
其他语言的列表:链表(单向链表/双向链表)——通常是由一系列节点来实现的,其每个节点(尾节点除外)中都有一个指向下一节点(上一节点)的引用。必须从头开始遍历才能找到某个元素所在的位置。
而对于insert插入操作而言,要将新元素插入到列表的首位,这种操作对于链表来说没一次插入都是一样的,但是对于数组而言,每次插入一个元素,都要将数组中所有的元素向右移动一个位置,把首位空出来,再进行插入,甚至在必要时,可能还需要将这些列表元素整体搬到一个更大的数组中。
所以append操作通常会采用一种被称为动态数组或向量的特定解决方案。
渐近记法——时间复杂度
分析算法和数据结构的重要工具,核心思想是提供一种资源表示形式,分析计算时所需要的资源(指时间,有时包括内存),例如我们可以将一个程序所需要的运行时间表示为T(n)=2.4n+7,忽略单位。
渐近记法使用的是一组由希腊字母构成的记号体系,分别是大O,Ω,θ。
大O表示渐近上界,Ω表示渐近下界,θ表示他们的交集。
O和Ω是相互可逆的,如果f属于O(g),那么g就属于Ω(f)
当n>n0时(n0是自然数),T(n)是小于cn2的,所以T(n)属于O(n2) #n2表示n的平方
交通规则
表2-1
常数级<对数级<线性级<线性对数级<平方级<立方级<多项式级<指数级<阶乘级
渐近表达式代表的都是一个函数集
简单规则
θ(n2+n3+n4+42)=θ(n4) #四次方 加法运算,以最高阶数为准
θ(4.2nlg n)=θ(nlg n) #乘法运算,常数因子忽略
福利规则
θ(f)+θ(g)=θ(f+g)
θ(f)·θ(g)=θ(f·g)
squares = [x**2 for x in seq]
#for x in seq:
# square = x**2
# squares.append(square)
#得出se