社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python-100 练习题 01 & 列表推导式

spearhead_cai • 6 年前 • 671 次点击  
阅读 114

Python-100 练习题 01 & 列表推导式

最近打算好好练习下 python,因此找到一个练习题网站,打算每周练习 3-5 题吧。

www.runoob.com/python/pyth…

另外,这个网站其实也还有 Python 的教程,从基础到高级的知识都有。


Example-1 三位数组合

题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

思路

最简单的方法,就是穷举法了,分别求出在百位、十位、个位上的数字,然后剔除出现重复数字的组合,剩余的就是答案了。

代码实现

直接代码实现如下:

def create_three_digits(number_start=1, number_end=4):
    '''
    给定指定数字范围(比如1到4),求可以组成多少个无重复的三位数
    :param number_start: 起始数字
    :param number_end: 结束数字
    :return: 返回数量,以及可能的三位数的列表
    '''
    count = 0
    result_list = list()
    for i in range(number_start, number_end + 1):
        for j in range(number_start, number_end + 1):
            for k in range(number_start, number_end + 1):
                if (i != j) and (i != k) and (j != k):
                    count += 1
                    result_list.append(str(i) + str(j) + str(k))
    return count, result_list
复制代码

写得更加简便点,可以采用列表推导式:

def create_three_digits2(number_start=1, number_end=4):
    '''
    采用列表推导式实现
    :param number_start:
    :param number_end:
    :return:
    '''
    return [str(i) + str(j) + str(k) for i in range(number_start, number_end + 1) for j in
            range(number_start, number_end + 1) for k in
            range(number_start, number_end + 1) if (i != j) and (i != k) and (j != k)]
复制代码

输出结果如下,总共有 24 种不同的排列组合。

valid count=24, and they are:
123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
复制代码

当然,目前这种代码实现的时间复杂度是很高的,毕竟是三个for循环。如果有更好的解法,可以在评论留言,告诉我!

知识点复习--列表推导式

列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。

它的结构是在一个中括号里包含一个表达式,然后是一个 for 语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。

用代码表示列表推导式如下:

variable = [out_exp for out_exp in input_list if out_exp == 2]
复制代码

一个简明的例子如下:

multiples = [i for i in range(30) if i % 3 is 0]
print(multiples)
# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
复制代码

那么,什么时候最适合用列表推导式呢?

其实是当你需要使用 for 循环来生成一个新列表。举个例子,你通常会这样做:

squared = []
for x in range(10):
    squared.append(x**2)
复制代码

这时候,采用列表推导式最合适:

squared = [x**2 for x in range(10)]
复制代码

源代码在:

github.com/ccc013/Code…


参考文章:

欢迎关注我的微信公众号--机器学习与计算机视觉,或者扫描下方的二维码,大家一起交流,学习和进步!

往期精彩推荐

学习笔记
数学学习笔记
Github项目 & 资源教程推荐

今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/eMDrAgTmb7
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/28354