python内置数据结构list、set、dict、tuple(一)

网友投稿 642 2022-05-28

汉诺塔问题

规则:

每次只能移动一个盘子

任意一次移动,三个塔的状态必须是小盘子在上,大盘子在上

方法:

n=1:直接把A上的一个盘子移动到C上,A->C

n=2:

把小盘子从A放到B上,A->B

把大盘子从A放到C上,A->C

python内置数据结构list、set、dict、tuple(一)

把小盘子从B放到C上,B->C

n=3:

把A上的两个盘子,通过C移动到B上去,调用递归实现

把A上剩下的一个最大盘子移动到C上,A->C

把B上两个盘子,借助于A,挪到C上去,调用递归

n=n:

把A上的n-1个盘子,借助于C,移动到B上去,调用递归

把A上的最大盘子,也是唯一一个,移动到C上去,A->C

把B上n-1个盘子,借助于A,移动到C上去,调用递归

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

n = 2 hano(n, a, b, c)

A --> B A --> C B --> C

n = 3 hano(n, a, b, c)

A --> C A --> B C --> B A --> C B --> A B --> C A --> C

n = 5 hano(n, a, b, c)

A --> C A --> B C --> B A --> C B --> A B --> C A --> C A --> B C --> B C --> A B --> A C --> B A --> C A --> B C --> B A --> C B --> A B --> C A --> C B --> A C --> B C --> A B --> A B --> C A --> C A --> B C --> B A --> C B --> A B --> C A --> C

List(列表)

del:删除命令

# del 删除 a = [1,2,3,4,5,6] del a[2] print(a)

[1, 2, 4, 5, 6]

# del 删除 # 如果使用del之后,id的值和删除前不一样,则说明删除生成了一个新的List a = [1,2,3,4,5,6] print(id(a)) del a[2] print(id(a)) print(a)

1787345100360 1787345100360 [1, 2, 4, 5, 6]

# del一个变量后不能再继续使用此变量 del a print(a)

--------------------------------------------------------------------------- NameError Traceback (most recent call last) in 1 # del一个变量后不能再继续使用此变量 ----> 2 del a 3 print(a) NameError: name 'a' is not defined

列表相加

# 使用加号连接两个列表 a = [1,2,3,4,5] b = [5,6,7,8,9] d = ['a', 'b', 'c'] c = a + b + d print(c)

[1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 'a', 'b', 'c']

# 使用乘号操作列表 # 列表直接跟一个整数想乘 # 相当于把n个列表接在一起 a = [1,2,3,4,5] b = a * 3 print(b)

[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

# 成员资格运算 # 就是判断一个元素是否在列表list里边 a = [1,2,3,4,5,6] b = 8 # c的值是一个布尔值 c = b in a print(c) b = 4 print(b in a)

False True

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

True

列表的遍历

for

while

# for in list a = [1,2,3,4,5] # 挨个打印a里边的元素 for i in a: print(i)

1 2 3 4 5

# java, c++ 程序员写的Python代码是这样的 for i in range(0,len(a)): print(a[i]) i += 1

1 2 3 4 5

b = ["I love you"] for i in b: print(i)

I love you

# range # in 后面的变量要求是可以迭代的内容 for i in range(1,10): print(i) print(type(range(1,10)))

1 2 3 4 5 6 7 8 9

# while循环访问list # 一般不用while遍历list a = [1,2,3,4,5,6] length = len(a) # indx表示的是list的下标 indx = 0 while indx < length: print(a[indx]) indx += 1

1 2 3 4 5 6

# 双层列表循环 # a为嵌套列表,或者叫双层列表 a = [["one", 1], ["two", 2], ["three", 3]] for k,v in a: print(k, "--", v)

one -- 1 two -- 2 three -- 3

# 双层列表循环变异 # a为嵌套列表,或者叫双层列表 a = [["one", 1, "enis"], ["two", 2], ["three", 3,4,5,6,8]] for k,v in a: print(k, "--", v)

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) in 4 a = [["one", 1, "enis"], ["two", 2], ["three", 3,4,5,6,8]] 5 ----> 6 for k,v in a: 7 print(k, "--", v) ValueError: too many values to unpack (expected 2)

# 双层列表循环变异 # a为嵌套列表,或者叫双层列表 a = [["one", 1, "enis"], ["two", 2, "zwei"], ["three", 3, "drei"]] # 这个例子说明:k,v,w的个数应该跟解包出来的变量个数一致 for k,v,w in a: print(k, "--", v, "--", w)

one -- 1 -- enis two -- 2 -- zwei three -- 3 -- drei

列表内涵:List content

通过简单的方法创作列表

# for 创建 a = ['a', 'b', 'c'] # 用List a创建一个List b # 下面的代码的含义是,对于所有a中的元素,逐个放入新列表b中 b = [i for i in a] print(b)

['a', 'b', 'c']

# 对a中所有元素乘以10,生成一个新List a = [1, 2, 3, 4, 5] # 用List a创建一个List b # 下面的代码的含义是,对于所有a中的元素,逐个放入新列表b中 b = [i*10 for i in a] print(b)

[10, 20, 30, 40, 50]

# 还可以过滤原来List中的内容并放入新列表 # 比如原有列表,需要把所有a中的偶数生成新的列表b a = [x for x in range(1,35)] # 生成从1到34的一个列表 # 把a中所有偶数生成一个新的列表 b b = [m for m in a if m % 2 == 0] print(b)

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34]

# 列表生成式可以嵌套 # 有两个列表a,b a = [i for i in range(1,4)] # 生成List a print(a) b = [i for i in range(100,400) if i % 100 == 0] print(b) # 列表生成是可以嵌套,此时等于两个for循环嵌套 c = [m+n for m in a for n in b] print(c) # 上面代码跟下面代码等价 for m in a: for n in b: print(m+n, end=" ") print() # 嵌套的列表生成也可以用条件表达式 c = [m+n for m in a for n in b if m+n < 250] 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]

关于列表的常用函数

# len:求列表长度 a = [x for x in range(1,100)] print(len(a)) # max:求列表中的最大值 # min:同理 print(max(a)) b = ["man", "film", "python"] print(max(b))

99 99 python

# List:将其他格式的数据转换成List a = [1,2,3] print(list(a))

[1, 2, 3]

s = "I love you" print(list(s))

['I', ' ', 'l', 'o', 'v', 'e', ' ', 'y', 'o', 'u']

# 把range产生的内容转换成list print(list(range(12,19)))

[12, 13, 14, 15, 16, 17, 18]

Python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:搭载 Apple T2 安全芯片的 Mac 电脑详细的U盘装系统图文教程
下一篇:【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第8套
相关文章