Python练习题:第1题 输出不同的三位数问题

本文介绍了一道Python练习题,探讨如何使用多重循环生成互不相同且无重复数字的三位数。通过两种不同方法实现,分别分析了它们的时间效率,并给出具体例子进行比较。

Python100道经典练习题
第一题:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
分析:可以用for的多重循环。可以在循环里面找出不符合要求的数。也可以在循环开始前删掉已经用过的数。

# -*- coding: utf-8 -*-
#By AntinSnow
import time

nums = [1,2,3,4,5,6,7]
#方法一
def forall(nums):
    Tsum = 0
    for i in nums:
        for j in nums:
            if j != i:
                for k in nums:
                    if k != i and k != j:
                        Tsum += 1
#                        print(i,j,k)
#    print(Tsum)

#方法二
def forpop(list):
    Tsum = 0
    for i in nums:
        num_1 = nums.copy()             #需要用深拷贝,否则会出错
        num_1.remove(i)
        for j in num_1:
            num_2 = num_1.copy()
            num_2.remove(j)
            for k in num_2:
                Tsum += 1
#                print(i,j,k)
#    print(Tsum)
'''测试两种方法的效果'''
start = time.time()
for n in range(100000):
    forall(nums)
end = time.time()
print('全循环耗时:',end - start)

start = time.time()
for n in range(100000):
    forpop(nums)
end = time.time()
print('部分循环耗时:',end - start)

结果分析:
1.如果输入的num=[1,2,3,4],第一种方法耗时约1.20s,第二种耗时约1.37s。
2.如果输入改成num=[1,2,3,4,5,6,7],第一种方法耗约8.10s,第二种耗时约7.23s。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值