Python经典编程习题100题之第1题:全排列数字

本文介绍了Python编程习题中关于全排列数字的解题方法,对比了两种不同的实现策略。作者在解决全排列问题时遇到了使用pop()和remove()操作的区别,详细解释了它们的差异。pop()默认移除列表末尾元素,而remove()则删除指定元素,但只会删除第一个匹配项。文章通过实例展示了这两种方法在全排列问题上的应用,并总结了遇到的问题。
摘要由CSDN通过智能技术生成


前言

记录学习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一次只删除第一个遇到相同的数值,不是一次删除所有指定的数值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值