学习python时记录自己或观察别人从错误到正确的思路远比只看正确答案效果好
1.编写一个函数,接收一个数字列表,并返回其累积和,例如[1,2,3]的累积和为[1,3,6]
看到求和想到前面用到的内置函数sum(t),但是sum只说了是求列表内所有值的和,不知道能不能求部分和,所以需要做一下测试
t=[1,2,3]
sum(t[:2])
返回值是3,表示可以用sum,然后得出如下代码:
def cumulative_sum(t):
res=[]
for i in range(len(t)-1): #刚开始想着后面有i+1,以前这里都是需要减一的,但是忽略了":(i+1)"是不包括右侧的i+1的,所以不用减一
res.append(sum(t[:(i+1)]))
return res
t=[1,2,3]
cumulative_sum(t)
返回值是[1,3],所以把减一去掉就可以了
def cumulative_sum(t):
res=[]
for i in range(len(t)):
res.append(sum(t[:(i+1)]))
return res
t=[1,2,3]
cumulative_sum(t)
这里有两点需要注意下,res后用append,我刚开始写成了res[i]=sum(t[:(i+1)]),这把字典和列表方法弄混,另外就是忘记了t[:(i+1)]中的“:”,也造成报错,需要注意下这些细节地方,这些bug是可以直接显示出来的,但是刚才那个减一是显示正常但是不符合预期结果,因为我们知道预期结果,所以才能检查出问题,如果不知道那就难了,写代码时还是需要提前想清楚。
列表删除元素有三种方法,需注意三者区别和是否有返回值:t.pop(),pop修改列表,并返回被删除掉的值,默认删除最后一个
del t[i],删除后不返回值,可以使用切片删除多个值
如果你知道要删除的元素而不知道下标,可以使用remove,返回值是None
对象和值:
a='banana'
b='banana'
a is b
输出是True
c=[1,2,3]
d=[1,2,3]
c is d
输出是False
前面a和b我们会说他们是相同的,在这个例子里python只建立了一个自发货车对象,而a和b都引用了它。
而后面两个我们可以说c和d是相等的,因为他们有相同的元素,但他们不是相同的。因为他们并不是同一个对象。如果两个对象相同,则不然相等,如果相等,但不一定相同。注意区分相同和相等。
区分修改列表的操作和新建列表的操作十分重要。例如append是修改列表,“+”则是新建列表。
t1=[1,2]
t2=t1.append(3)
print(t1)
print(t2)
[1, 2, 3]
None #t2返回None说明t1.append(3)没有返回值
t3=t1+[4]
print(t3)
[1, 2, 3, 4]
切片操作会新建一个列表
def tail(t):
return t[1:]
letters=['a','b','c']
rest=tail(letters)
print(rest)
['b', 'c']
2.编写一个函数is_anagram,接收两个字符串,当他们互为回文时返回True
给的提示是两个单词,如果重新排列其中一个的字母可以得到另一个则互为回文,这个提示我是看懂了,但是感觉不太对,上网查了下也只查了些诗中有互为回文的,但是那个写的是前面说的互为倒序的,那么就奇怪了,互为回文和互为倒序有什么区别,暂时先按照提示来写吧
def is_anagram(w