美文网首页Python学习与实战
Python-100 练习题 01 & 列表推导式

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

作者: 材才才 | 来源:发表于2019-01-27 10:41 被阅读6次

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

    http://www.runoob.com/python/python-100-examples.html

    另外,这个网站其实也还有 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)]
    

    源代码在:

    https://github.com/ccc013/CodesNotes/blob/master/Python_100_examples/example1.py


    参考文章:

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

    image

    往期精彩推荐

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

    相关文章

      网友评论

        本文标题:Python-100 练习题 01 & 列表推导式

        本文链接:https://www.haomeiwen.com/subject/vqsgjqtx.html