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

栏目: Python · 发布时间: 5年前

内容简介:最近打算好好练习下 python,因此找到一个练习题网站,打算每周练习 3-5 题吧。另外,这个网站其实也还有 Python 的教程,从基础到高级的知识都有。

最近打算好好练习下 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…

参考文章:

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

引爆点

引爆点

[美] 马尔科姆·格拉德威尔 / 钱清、覃爱冬 / 中信出版社 / 2006-1 / 29.80元

这本书是《纽约客》杂志专职作家马尔科姆·格拉德威尔的一部才华横溢之作。他以社会上突如其来的流行风潮研究为切入点,从一个全新的角度探索了控制科学和营销模式。他认为,思想、行为、信息以及产品常常会像传染病爆发一样,迅速传播蔓延。正如一个病人就能引起一场全城流感;如果个别工作人员对顾客大打出手,或几位涂鸦爱好者管不住自己,也能在地铁里掀起一场犯罪浪潮;一位满意而归的顾客还能让新开张的餐馆座无虚席。这些现......一起来看看 《引爆点》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换