查看: 80|回复: 0

ESP32 / ESP8266 MicroPython教程:如何使用List列表

[复制链接]
  • TA的每日心情

    2018-1-11 13:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2019-5-13 15:41 | 显示全部楼层 |阅读模式
    本帖最后由 dfrobot 于 2019-5-13 17:40 编辑


    介绍

    本MicroPython教程的目的是解释如何在MicroPython 中使用列表。本教程在 esp32 和 esp8266 上进行了测试。
    列表是 python 非常有用的数据结构, 在 MicroPython 中也可以使用。我们不会涵盖所有可用的功能, 而是看看主要的功能。
    测试是使用 micropython ide upycaft 进行的。遵循本教程的最简单方法是在 micropython 命令行中发送命令。您可以在上一篇文章中检查如何在 upycaft 上使用它:ESP32 MicroPython教程:uPyCraft IDE入门

    测试是在 esp32 和 esp8266 上进行的。在 esp32 上的测试是使用 dfrobot 的esp-wroom-32设备集成在FireBeetle ESP32开发板上进行的。本教程中显示的图片来自 esp32 上的测试。



    创建列表

    在MicroPython中创建list列表非常简单,只需将数据写入方括号中即可,数据之间用逗号分隔,无需调用构造函数或其它函数。例如,通过以下代码,我们将创建一个整数列表。


    kittenblock中小学创客名师推荐的图形化编程软件

    1 intList = [1,2,3,4,5]
    2 print(intList)
    1  stringList = ['a','b','c','d','e']
    2  print(stringList)
    2  type(stringList)
    

    当然,我们也可以创建其它类型目标对象列表。例如,示例2中,我们创建了一个字符串列表。

    在这两个示例中,如果使用数据类型函数检查这些变量的类型,那么将返回”list”数据类型。


    在uPyCraft IDE的Python命令行中输入这些命令,输出结果如图1所示。



    图1 - 创建整数列表及字符串列表




    有意思的是,实际上我们可以创建含有不同类型元素的列表。在以下示例中,我们创建了一个含有字符串、整数及其它数据类型元素的列表。

    kittenblock中小学创客名师推荐的图形化编程软件

    
    1  objectList = [1, 2, 'a', 'b', 'c', [ 1, 2, 3] ]
    2  print (objectList)
    3  type(objectList)


    图2显示了这些命令的输出结果。



    图2 - 创建含多种类型元素的列表



    在这里提醒一下,如果要创建一个空列表,我们只需使用方括号即可,不必在括号中包含任何数据。我们可以后来再向列表中添加元素。

    kittenblock中小学创客名师推荐的图形化编程软件

    
    1  emptyList = []
    2  print (emptyList)




    访问列表元素

    与其它计算机语言中访问数组元素的方式类似,我们可以使用方括号访问列表元素。MicroPython的语法非常强大,不仅限于简单地访问给定位置上的列表元素,接下来我们将通过一个例子来说明这一点。

    kittenblock中小学创客名师推荐的图形化编程软件

    
    2  print (myList[0])
    3  print (myList[1])
    4  print (myList[2])


    特别需要注意的是,列表的索引号是从0开始的,即列表第一个元素的索引号为0。接下来,我们将创建一个列表,然后通过索引号访问这个列表的每个元素。




    若要同时检索一个列表的多个元素,我们需要输入索引区间首个及最后一个元素的索引号,两者用冒号“:”分割,这样就可以返回所有这些待检索的元素,如下图所示。注意,索引区间冒号右边的索引号不在检索的范围内,因此,在含有3个元素的示例3中,若要检索全部3个元素,我们需要输入0:3。
    在这个访问多个元素的示例中,我们将打印出返回对象的类型,以此显示它是一个列表类型数据。此外,如果我们只访问其中一个元素,那么返回对象的类型将是一个整数类型。

    kittenblock中小学创客名师推荐的图形化编程软件

    1  print (myList[0:3])
    2  type(myList[0])
    3  type(myList[0:3])


    图3显示了这些命令的运行结果。





    图3 - 通过索引号访问列表的元素




    另外,我们也可以只指定索引区间的起始或结束索引号。


    kittenblock中小学创客名师推荐的图形化编程软件

    1  print(myList[0:])
    2  print(myList[:3])
    3  print(myList[1:])


    图4显示了这种索引方式的输出结果。



    图4 - 只指定索引区间的起始或结束索引号访问列表的输出结果




    另一个有意思的功能是,我们可以使用负数索引号访问列表的元素。负数索引号表示从列表的末端向前进行检索,例如,检索号“-1”表示列表的最后一个元素,以此类推。

    kittenblock中小学创客名师推荐的图形化编程软件

    
    1  print(myList[-1])
    2  print(myList[-2])
    3  print(myList[-3])


    图5显示了采用负数索引号访问列表的输出结果


    图5 - 采用负数索引号访问列表。




    当然,我们可以通过索引号访问元素并给它指定一个新的值,从而达到更新列表元素的目的。


    kittenblock中小学创客名师推荐的图形化编程软件

    1  testList = ['a', 'b', 'c']
    2  print(testList)
    3 
    4  testList[0] = 1
    5  testList[1] = 2
    6  testList[2] = 3
    7  print(testList)

    图6显示了这些操作的输出结果。




    图6 - 更新列表元素。




    实用方法和函数

    向列表追加内容是一种非常常见的操作。为此,我们只需调用Append(追加)方法,将我们希望添加的对象追加到列表的末尾即可。

    kittenblock中小学创客名师推荐的图形化编程软件

    
    1  testList = ['a', 'b', 'c']
    2  testList.append('d')
    3  print(testList)

    此外,我们还可以使用Extend(扩展)方法将一个列表追加到另一个列表的末尾。


    kittenblock中小学创客名师推荐的图形化编程软件

    1  toAppendList = ['e', 'f']
    2  testList.extend(toAppendList)
    3  print(testList)
    

    如果我们想在给定的索引位置插入一个新的元素,那么我们可以使用Insert(插入)方法,在这个操作中,索引号是第一个参数,该索引号对应的对象是第二个参数。

    kittenblock中小学创客名师推荐的图形化编程软件

    1  myList = [1,3]
    2  myList.insert(1,2)
    3  print(myList)

    若要移除一个对象,我们可以使用Remove(移除)方法将一个传入对象从列表中移除。注意,Remove(移除)方法不会返回所移除的元素。


    kittenblock中小学创客名师推荐的图形化编程软件

    1  myList = [1,2,3]
    2  myList.remove(1)
    3  print(myList)

    图7显示了本节所述命令的输出结果。


    图7 - 执行Append、Insert及Remove操作的输出结果


    “del”操作符是从列表中移除一个元素的另一种方式。它允许用户指定待移除元素的索引号。注意,由于它不是列表的操作方法,所以语法上有所不同,如下所示。

    这种调用方式也不会返回移除的元素。此外,我们还可以使用Pop函数从列表中移除指定索引号的元素,这种方法可以返回移除的元素。


    kittenblock中小学创客名师推荐的图形化编程软件

    1  intList = [1,2,3,4]
    2  del intList[0]
    3  print(intList)
    4 
    5  popedElement = intList.pop(0)
    6  print(popedElement)


    获取列表的长度是另一个重要的操作。为此,我们只需简单地调用len函数并将列表作为其输入参数即可。

    kittenblock中小学创客名师推荐的图形化编程软件

    
    1  testList = [1,2,3,4,5,6,7,8,9,10]
    2  print(len(testList))


    图8显示了这些命令的输出结果。



    图8 - del、pop和len函数的输出结果。



    其它操作

    Concatenation(拼接)是一种可以简单操作列表的方式,无需调用任何方法,只需简单地使用“+”操作符即可。

    kittenblock中小学创客名师推荐的图形化编程软件

    1 myList = [1,2,3]
    2  concatList = [4,5]
    3
    4  finalList = myList + concatList
    5  print(finalList)        


    Repetition(重复)是另一项实用的列表操作方式,它使用“*”操作符执行操作。此功能可用于使用指定值初始化数组。



    我们还可以使用“in”操作符检查一个元素是否含在列表中,避免使用搜索循环代码进行判断。

    kittenblock中小学创客名师推荐的图形化编程软件

    
    1  myList = ['a','b','c']
    2  print('a' in myList)
    3  print('d' in myList)


    图9显示了这三种操作符的输出结果。




    图9 - +、*和in操作符的输出结果




    迭代

    若要迭代整个列表,我们可以执行从0至列表长度的传统循环方式。我们可以执行一个“for”循环,将当前的元素作为循环变量,从而迭代整个列表。这种操作方式使语法更加清晰和紧凑,也更不容易出错。

    kittenblock中小学创客名师推荐的图形化编程软件

    1  myList = ['a', 'b', 'c', 'd']
    2 
    3  for element in myList:
    4  print(element)


    图10 - 使用“for”循环迭代列表




    最后

    从本教程中可以看出,list(列表)非常容易使用,但也非常强大。因此,为了充分利用MicroPython的潜力,了解它的数据结构以及如何使用它们是很重要的。
    注意,我们只介绍了一些介绍性的功能,因为Python列表(list)可以提供更多的功能。



    注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。
    他写了很多有关ESP32、ESP8266的有用的教程和项目。

    查看更多ESP32/ESP8266教程和项目,请点击 : ESP32教程汇总贴
    英文版教程 : ESP32 tutorial


    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    请问一下微动开关 4X4矩阵键盘 16按键  怎么接ardiuno的 接口?
    请问一下微动开关 4X4矩阵
    请问下这款微动开关 4X4矩阵键盘 16按键的 8个接口分别接单片机的什么口,我
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    Nano 一直显示上传,不显示上传成功。
    Nano 一直显示上传,不显
    前面用的还好好的,突然就传不上程序了。一直停留在上传状态中,就是不限显示上传成功
    【项目】基于Arduino Nano的多功能桌面感应垃圾桶
    【项目】基于Arduino Nano
    基于Arduino Nano的多功能桌面感应垃圾桶随着大学生活不断往前迈进,宿舍桌面上的杂物
    Arduino板接74HC拓展接驱动器接多个四项电机
    Arduino板接74HC拓展接驱
    一个Arduino板能不能接多个74HC595来得到多个拓展? 如果能的话要怎么接啊? 如果接
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表