前言
记录学习Python经典编程习题100例
参考
题目来源和参考-魏宝航
第1例:全排列数字
题目描述:
有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
解题思路:
从百位依次开始取值,取完值将其从列表中剔除,进行三次循环
我方法的代码:
n = 0
nums = [1,2,3,4]
for i in nums:
numi = nums.copy()
if i in numi:
numi.remove(i)
for j in numi:
if j in numi:
numi.remove(j)
for k in numi:
print(str(i)+str(j)+str(k))
print(str(i) + str(k) + str(j))
n += 2
print("一共可以组成:"+str(n)+"个三位数")
学习的代码:
n = 0
for i in range(1,5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and i != k and j != k :
print(str(i)+str(j)+str(k))
n += 1
print("一共可以组成:"+str(n)+"个三位数")
其思路是:
直接循环遍历就好
三重循环当三者不相等时输出对应数字
也可以用全排列
不同之处在于
1.我思考的出发点是用过就将其从列表中剔除出去,接着进行下一位的操作,但这存在问题就是个位和十位只出现,要将个位和十位交换一次才是最终的答案和个数
2.魏up的做法是进行循环,然后让各个位上的不同就行,就只需做一个判断
遇到的问题总结
列表中pop和remove操作的区别
列表中pop()和remove()操作的区别
pop()
默认删除列表末尾的数据,但不可指定删除某一个数据,但可按位指定删除。且可以返回删除后的数值
例子
n =[1,2,2,3,4,5]
a=n.pop(4)
print (a)
输出
4
[1, 2, 2, 3, 5]
remove()
指定删除列表中某一指定的数据,但仅可删除一个数据,不可删除多个数据
例子
a = [66.25, 333, 333, 1, 1234.5]
a.remove(333)
print(a)
输出
[66.25, 333, 1, 1234.5]
注意
remove一次只删除第一个遇到相同的数值,不是一次删除所有指定的数值