当前位置 博文首页 > 李江辰:Python:列表推导生成随机数矩阵(高教社,《Python编程

    李江辰:Python:列表推导生成随机数矩阵(高教社,《Python编程

    作者:[db:作者] 时间:2021-08-23 22:19

    前言

    PTA程序设计类教学平台—def函数
    运行环境Python3.6
    小白进阶之路的学习与记录之------列表

    题目:

    编写一个Python函数,生成一个m行n列的元素值不大于20的随机数矩阵(二维列表)。 提示:使用random.randint()函数来生成随机数。

    函数接口定义:

    def generateMatrix(m,n)

    m: 行数,int, 1 < m < 100; n: 列数, int, 1 < n < 100.

    裁判测试程序样例::

    import random
    
    m = int(input())
    n = int(input())
    r = generateMatrix(m,n)
    p = True
    for i in range(m):
        for j in range(n):
            if r[i][j] > 20:
                p = False
                break
    if m > 3 and n > 3:
        if r[0][0] == r[2][2] and r[1][1] == r[1][2] and r[0][2] == r[3][0]:
            p = False
    
    print(p)
    #测试程序的输出:True
    

    测试输入样例::

    在这里给出一组输入。例如:

    5
    3

    测试程序输出:

    True

    答案:

    PTA:

    def generateMatrix(m,n):
        return [[random.randint(0,20) for x in range(n)] for y in range(m)]
    

    Pycharm完整代码:

    import random
    r = []
    def generateMatrix(m, n):
        return [[random.randint(0, 20) for x in range(n)] for y in range(m)]
    
    
    m = int(input())
    n = int(input())
    r = generateMatrix(m,n)
    p = True
    for i in range(m):
        for j in range(n):
            if r[i][j] > 20:
                p = False
                break
    if m > 3 and n > 3:
        if r[0][0] == r[2][2] and r[1][1] == r[1][2] and r[0][2] == r[3][0]:
            p = False
    
    print(p)
    
    

    代码解析:

    首先我们得掌握列表的知识

    列表list:

    列表(list)用来存储不同的数据类型,使用 [ ]
    例如:

    list = ['A','B','C']
    

    列表增删改查:

    方法\函数用法
    append追加,在列表的尾部加入指定的元素
    insert将指定的元素插入到对应的索引位上,注意负索引(一般不使用,动的很多)
    extend将指定序列的元素依次追加的列表的尾部(合并)
    pop弹出,返回并删除指定索引位上的数据,默认删除索引为-1(最后一个)的数据
    remove从左往右删除一个指定的元素
    del删除整个列表或列表的数据,del是Python内置功能,不是列表独有
    count计数,返回要计数的元素在列表当中的个数
    index查找,从左往右返回查到的第一个指定元素的索引,如果没有找到,报错
    in查找元素是否在列表中,在输出true,否则false
    reverse顺序倒序
    sort按照ascii码表书序进行排序

    二维列表
    如何创建二维列表:
    例如创建四行三列的列表:

    a = [[0] * 3] * 4
    

    [[0,0,0], [0,0,0], [0,0,0], [0,0,0]]

    [0,0,0]
    [0,0,0]
    [0,0,0]
    [0,0,0]
    这虽然能产生3*4的二维数组,但在修改数组内容时发现:同一列的数据会同时改变时刻保持一致,如:

    a[1][2]=3
     print(a)
    

    [[0, 0, 3], [0, 0, 3], [0, 0, 3], [0, 0, 3]]

    ???????????因为list * n—>n shallow copies of list concatenated, n个list的浅拷贝的连接
    ???????????而[[]]是一个含有一个空列表元素的列表,所以[[]]3表示3个指向这个空列表元素的引用,修改任何一个元素都会改变整个列表。
    完美的二维数组创建方式:
    4
    3:

    a = [([0] * 3) for i in range(4)]
    

    ???????????
    ???????????
    了解上面后现在就可以简单的实现了m行n列的二维列表创建了

    m = int(input()) #m行
    n = int(input()) #n列
    a = [[0 for x in range(n)] for y in range(m)]
    print(a)
    

    再把随机数生成函数放入上面的代码里:

    random.randint(区间)

    import random
    
    m = int(input())
    n = int(input())
    a = [[random.randint(0, 20) for x in range(n)] for y in range(m)]
    print(a)
    

    最后就只需要按题目要求定义一个 generateMatrix函数啦

    def generateMatrix(m,n):
        return [[random.randint(0,20) for x in range(n)] for y in range(m)]
        
    

    -END-

    实现的方法有很多,本篇博客只是给新手提供一种思路。
    如有帮助记得点赞~

    cs