Python入门学习笔记————07(函数,list相关问题)

汉诺塔问题

  • 规则:
      1. 每次移动一个盘子
      2. 任何时候大盘子在下面,小盘子在上面
    
  • 方法:
     1. n=1: 直接把A上的一个盒子移动到C上面,A->c
     2. n=2:
         1.把小盘子从A放到B上,A->B
         2.把大盘子从A放到C上,A->C
         3.把小盘子从B放到C上,B->c
     3. n=3:
         1. 把A上的两个盘子,通过C移动到B上去,调用递归实现
         2. 把A上剩下的一个最大的盘子移动到C上,A->C
         3. 把B上两个大盘子,借助于A,移到C上去,调用递归
     4. n=n:
         1. 把A上的n-1个盘子,通过C移动到B上去,调用递归实现
         2. 把A上剩下的一个最大的盘子移动到C上,A->C
         3. 把B上n-1个大盘子,借助于A,移到C上去,调用递归
    

In [30]:

def hano(n,a,b,c):
    '''
    汉诺塔的递归实现
    n: 代表几个盘子
    a: 代表第一个塔,开始的塔
    b: 代表第二个塔,中间过度的塔
    c: 代表第三个塔,目标塔
    '''
    if n == 1:
        print (a,'-->',c)
        return None
    '''
    if n == 2:
        print (a,'-->',b)
        print (a,'-->',c)
        print (b,'-->',c)
        return None   
 
        可以不需要
    '''
    #把n-1个盘子,从a塔借助c塔,移动到b塔上去
    hano(n-1,a,c,b)
    print (a,'-->',c)
    #把n-1个盘子,从b塔,借助a塔,移动到c塔上去
    hano(n-1,b,a,c)
 
a = 'A'
b = 'B'
c = 'C'
n=1
hano(n,a,b,c)    
A --> C

In [32]:

n=3
hano(n,a,b,c)
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C

列表(list)

  • 删除操作del
  • 列表相加
    • 使用加号连接两个列表
    • 乘号
  • 成员存在函数
    • in / not in
  • 列表遍历
    • for/while
  • 列表内涵: list content
    • 通过简单的方法创作列表

In [35]:

#del删除操作
a = [1,4,2,4,2,5]
print(id(a))
del a[2]    
print (id(a))    #两id一至,所以是在原列表删除
print(a)   
140017770002952
140017770002952
[1, 4, 4, 2, 5]

In [37]:

#del 删除一个变量后,变量不能继续使用
del a
print(a)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-37-fc8924c35de0> in <module>()
      1 #del 删除一个变量后,变量不能继续使用
----> 2 del a
      3 print(a)

NameError: name 'a' is not defined

In [40]:

#连接列表
a = [1,2,3,4,5]
b = [6,5,3,2,1]
d = ['a','b','c']
c = a+b+d#加号连接
print (c)
c = a * 3 #乘号
print (c)
[1, 2, 3, 4, 5, 6, 5, 3, 2, 1, 'a', 'b', 'c']
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

In [42]:

 
#成员资格运算(in / not in )
#判断一个元素是否在list里面
a = [1,2,3,4,5,6]
b = 3
c = b in a
print(c)
d = 7
print(d in a)
True
False

In [44]:

#not in 
a = [3,4,5,6,2,1]
b = 5
print(b not in a)
False

In [50]:

# for in list
#in 后面的变量要求为可迭代的内容
a = [1,2,3,4,5]
for i in a:
    print (i)
1
2
3
4
5

In [49]:

b = ['hello']
for i in b:
    print(i)
hello

In [54]:

##while
##一般不使用
a = [1,2,3,4,5]
length = len(a)
#index表示list的下标
index = 0 
while index<length:
    print(a[index])
    index += 1
1
2
3
4
5

In [57]:

 
#双层列表循环
a = [[1,'a'],[2,'b'],[3,'c']]
for k,v in a:
    print (k,'--',v)
1 -- a
2 -- b
3 -- c

In [60]:

#双层列表循环变形
a = [[1,'a','z'],[2,'b','x'],[3,'c','v']]
for k,v,w in a:     #k,v,w 数目应该与解包出来的个数一致
    print (k,'--',v,'--',w)
1 -- a -- z
2 -- b -- x
3 -- c -- v

In [66]:

# for 创建
a = ['a','b',2]
#用list a 创建list b
b = [i for i in a]
print (b)
['a', 'b', 2]

In [68]:

 
#乘10创建新列表
a = [1,2,3,2]
#用list a 创建list b
b = [i*10 for i in a]
print (b)
[10, 20, 30, 20]

In [71]:

#还可以进行过滤创建新的列表
#把a中的偶数生成b
a = [x for x in range(1,21)]
print (a)
b = [i for i in a if i % 2 == 0]
print(b)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

In [89]:

#列表生成也可以嵌套
a = [i for i in range(1,4)]
b = [n for n in range(100,400) if n%100 == 0]
c = [m+p  for m in a  for p in b]   #两个for循环嵌套
print (a)
print (b)
print (c)
#for循环嵌套
for i in a:
    for m in b:
        print(i + m,end=' ')
print()
#也可添加if
c = [m+p  for m in a  for p in b if m+p < 205]
print (c)
[1, 2, 3]
[100, 200, 300]
[101, 201, 301, 102, 202, 302, 103, 203, 303]
101 201 301 102 202 302 103 203 303 
[101, 201, 102, 202, 103, 203]

关于列表的常用函数

In [93]:

# len:求列表长度
a = [1,2,3,4,5]
print(len(a))
#max:求最大
#min:求最小
print(max(a))
print(min(a))
b = ['hello','name','goods']
print(max(b))
print(min(b))
5
5
1
name
goods

In [99]:

#list:将其他格式转化为list  (要求:别转化内容必须为可迭代的)
a = [1,2,3,4]
print(list(a))
b = 'hello word'  #注意空格也是字符
print(list(b))
print(list(range(1,10)))
[1, 2, 3, 4]
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'd']
[1, 2, 3, 4, 5, 6, 7, 8, 9]

猜你喜欢

转载自blog.csdn.net/weixin_42492218/article/details/84951241
今日推荐