【雕爷学编程】MicroPython手册之数据类型 list 列表 list * n

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述
MicroPython的数据类型是指在MicroPython编程环境中,可以用来表示不同种类的数据的方式。MicroPython的数据类型与Python的数据类型基本相同,但也有一些区别和限制,因为MicroPython是为了运行在资源有限的微控制器上而设计的。这里将介绍MicroPython中常用的数据类型,包括数字、字符串、列表、元组和字典,以及它们的应用场景和注意事项。

**一、MicroPython数据类型 list * n **
MicroPython的 list 列表是一种用于存储多个值的数据结构,它可以包含不同类型的元素,如整数、字符串、列表等。列表中的每个元素都有一个索引,表示它在列表中的位置,索引从0开始,即列表的第一个元素的索引是0,第二个元素的索引是1,依次类推。列表是可变的,也就是说,我们可以对列表中的元素进行添加、删除、修改等操作。

列表支持很多操作,例如:
append(val):在列表的末尾添加一个新元素val。
extend(iterable):在列表的末尾添加另一个列表或可迭代对象中的所有元素。
insert(index, val):在指定的索引位置插入一个新元素val。
remove(val):从列表中移除第一个值为val的元素。
pop(index):从列表中移除指定索引位置的元素,并返回该元素。
del list[index]:从列表中删除指定索引位置的元素。
len(list):返回列表中元素的个数。
list1 + list2:将两个列表连接起来,返回一个新的列表。
list * n:将列表重复n次,返回一个新的列表。
val in list:判断val是否在list中,返回True或False。

MicroPython的list * n是一个列表乘法的操作,用于将一个列表的元素重复n次,生成一个新的列表。例如,如果list = [1, 2, 3],n = 2,那么list * n = [1, 2, 3, 1, 2, 3]。

list * n的应用场景有很多,例如:
1、初始化一个指定长度和初始值的列表,如[0] * 10表示一个长度为10,所有元素都为0的列表。
2、在一个列表的末尾扩展多个相同的元素,相当于用append方法多次添加,如list.append(x) * n。
3、生成一个二维列表,即列表的列表,如[[1, 2, 3]] * 3表示一个包含三个[1, 2, 3]的列表。

list * n的注意事项有以下几点:
1、list * n只能用于列表类型和整数类型的数据,如果用于其他类型的数据,如字符串、元组、浮点数等,会报错TypeError: can’t multiply sequence by non-int of type ‘…’。
2、list * n返回的是一个新的列表对象,不会改变原来的list的内容和结构,如果需要修改原来的列表,可以用赋值语句,如list = list * n。
3、list * n的时间复杂度是O(n),其中n是列表的元素个数乘以重复次数,如果n很大,可能会影响程序的性能和内存占用。

以下是几个MicroPython的list * n实际运用程序案例:
案例一:实现一个简单的打印图案函数,可以打印指定字符和行数的图案。

# 定义一个打印图案函数,接受两个参数:字符c和行数n
def print_pattern(c, n):
    # 定义一个空字符串,用于存储图案
    pattern = ""
    # 用for循环遍历从第一行开始到第n行
    for i in range(1, n + 1):
        # 将字符c重复i次,并添加到pattern字符串中
        pattern += c * i
        # 在每一行的末尾添加换行符
        pattern += "\n"
    # 打印图案
    print(pattern)
# 调用打印图案函数,传入字符"*"和行数5
print_pattern("*", 5)

案例二:实现一个简单的矩阵乘法函数,可以计算两个矩阵(二维列表)的乘积。

# 定义一个矩阵乘法函数,接受两个参数:矩阵a和矩阵b
def matrix_multiply(a, b):
    # 获取矩阵a和b的行数和列数,并赋值给m, n, p, q
    m = len(a)
    n = len(a[0])
    p = len(b)
    q = len(b[0])
    # 如果矩阵a的列数不等于矩阵b的行数,打印错误信息,并返回None
    if n != p:
        print("两个矩阵不能相乘。")
        return None
    # 定义一个空列表,用于存储结果矩阵
    result = []
    # 用for循环遍历从第一行开始到第m行
    for i in range(m):
        # 定义一个空列表,用于存储当前行的元素
        row = []
        # 用for循环遍历从第一列开始到第q列
        for j in range(q):
            # 定义一个变量sum,用于存储当前位置的元素值,初始为0
            sum = 0
            # 用for循环遍历从第一项开始到第n项
            for k in range(n):
                # 将矩阵a中第i行第k列的元素与矩阵b中第k行第j列的元素相乘,并累加到sum中
                sum += a[i][k] * b[k][j]
            # 将sum的值添加到row列表中
            row.append(sum)
        # 将row列表添加到result列表中
        result.append(row)
    # 返回结果矩阵
    return result
# 定义两个矩阵(二维列表)
a = [[1, 2, 3], [4, 5, 6]]
b = [[7, 8], [9, 10], [11, 12]]
# 调用矩阵乘法函数,传入矩阵a和b,并赋值给c
c = matrix_multiply(a, b)
# 打印结果矩阵
print("两个矩阵的乘积为:")
# 用for循环遍历结果矩阵中的每个元素,即每一行的列表
for row in c:
    # 用join方法将row列表中的每个元素转换为字符串,并用空格分隔成一个字符串,打印输出
    print(" ".join(str(x) for x in row))

案例三:实现一个简单的字符串反转函数,可以将一个字符串中的字符顺序颠倒。

# 定义一个字符串反转函数,接受一个参数:字符串s
def reverse_string(s):
    # 定义一个空列表,用于存储反转后的字符
    reversed_chars = []
    # 用for循环遍历字符串s中的每个字符,从后往前
    for i in range(len(s) - 1, -1, -1):
        # 将当前字符添加到reversed_chars列表中
        reversed_chars.append(s[i])
    # 将reversed_chars列表中的所有字符连接成一个新的字符串,并返回
    return "".join(reversed_chars)
# 提示用户输入一个字符串
print("请输入一个字符串:")
# 获取用户的输入,并赋值给s
s = input()
# 调用字符串反转函数,传入字符串s,并赋值给r
r = reverse_string(s)
# 打印结果
print("反转后的字符串为:")
print(r)

案例四:重复元素:

my_list = [1, 2, 3]
repeated_list = my_list * 3
print(repeated_list)  # 输出:[1, 2, 3, 1, 2, 3, 1, 2, 3]

在这个示例中,我们使用*操作符将my_list列表中的元素重复3次,生成一个新的列表repeated_list。新列表中的元素是原始列表中的元素按顺序重复出现。

案例五:列表扩展:

base_list = [0, 1, 2]
extension_list = [3, 4, 5]
extended_list = base_list + (extension_list * 2)
print(extended_list)  # 输出:[0, 1, 2, 3, 4, 5, 3, 4, 5]

在这个示例中,我们首先使用*操作符将extension_list列表重复2次,生成一个新的列表作为扩展。然后,使用+操作符将base_list和扩展列表连接在一起,生成一个新的列表extended_list。

案例六:初始化列表:

size = 5
default_value = 0
initialized_list = [default_value] * size
print(initialized_list)  # 输出:[0, 0, 0, 0, 0]

在这个示例中,我们使用*操作符将default_value重复5次,生成一个新的列表initialized_list。这可以用于初始化一个具有默认值的固定大小的列表。

案例七:重复列表元素

original_list = [1, 2, 3]
repeated_list = original_list * 3
print(repeated_list)  # 输出:[1, 2, 3, 1, 2, 3, 1, 2, 3]

在这个案例中,通过使用 * 操作符,我们将原始列表 original_list 中的元素重复了三次,生成了一个新的列表 repeated_list。

案例八:扩展列表

base_list = [0, 1]
extension_list = base_list * 4
print(extension_list)  # 输出:[0, 1, 0, 1, 0, 1, 0, 1]

在这个案例中,我们使用 * 操作符将基础列表 base_list 中的元素重复了四次,生成了一个新的列表 extension_list。这样可以快速扩展列表的长度。

案例九:初始化列表

empty_list = [None] * 5
print(empty_list)  # 输出:[None, None, None, None, None]

在这个案例中,我们使用 * 操作符将 None 元素重复了五次,生成了一个新的列表 empty_list。这种方法可以用于初始化具有相同元素的列表。

这些是关于MicroPython中list * n操作的三个实际运用程序案例。通过使用*操作符,可以灵活地重复列表元素、进行列表扩展和初始化固定大小的列表。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值