基础篇_006_list列表

  列表在Python中是以一种类的形式存在的,是许多元素的集合,用“[]”来表示,eg:li = [123, 456, [123, 234], "798"],"[]"我们再熟悉不过了,之前在字符串有提及到,这里的[]和字符串中的[]的用法十分类似,可以用来访问和更改相应位置上的元素。

  然而,之前我们说过:字符串一旦在内存中被创建就不能被修改,虽然列表在处理元素时与字符串不尽相同,但是列表中的元素是可以随意更改的,如果有接触过Java、C等语言的同学可能对数据结构有所了解,在数据结构中有一种线性表叫做:链表

  在Python中,列表就是链表的一种实现。可以随意地进行增删改查,不用重新创建新的列表。

----访问、更改列表元素的方式:

  1. [i]:利用索引的方式进行访问或者修改,包括删除。eg:想要删除索引为1的元素,del(删除的关键字) li[1]

  2. [i:j:k]:"补充_001_问题_001_Vivian",利用切片的方式进行访问或者删除,但是不能做更改值的操作。删除操作如上↑。

  3. for循环迭代:for elem in li:  .....

  4. in关键字:判断某个元素是否在列表中 ===》v = value in li。

 

----列表的一些方法:

  1. list():将可以迭代的元素转换为列表(因为其中用的就是for循环,只有能迭代的对象才能正确使用for循环),如字符串:

 

1 string = "simbawang"    # 字符串可以看成是由字符组成的数组,是可以迭代的
2 li = list(string)
3 print(li)   # 输出结果为:['s', 'i', 'm', 'b', 'a', 'w', 'a', 'n', 'g']

 

  2. 转换成字符串的方法:可能大家首先会想到用str(),但是我们来看一下结果如何 ===》

 

1 li = [123, 234, 345, "adsfa", "rqer"]
2 string = str(li)
3 print(string)   # 输出的结果为:[123, 234, 345, 'adsfa', 'rqer']
4 # 显然,这里Python将这个列表看成了一个整体

 

--既然不能用简单的函数,那我们就只能自己使用for循环来讲元素一个一个地取出来,然后再转换成字符串,最后将他们相加 ===》

 

 1 # 定义一个列表
 2 li = [123, 234, 345, "adsfa", "rqer"]
 3 # 定义一个保存最后结果的变量,初始化为空字符串
 4 result = ""
 5 # 将列表中的元素一个一个地取出来
 6 for element in li:
 7     # 由于列表中存在不同类型的元素,所以不能直接相加
 8     string_element = str(element)
 9     result += string_element
10 print(result)   # 输出的结果为:123234345adsfarqer

 

但是这里还是存在一种特殊的情况的,大家可以回想一下"基础篇_004_基本数据类型_几种重要函数的整理_字符串函数的分级"中的第一个函数:join(),它就是拼接字符串的,所以当列表中的元素全为str类型的时候,就可以用"".join(li)来实现。

  3. append(p_object):在原列表后面直接添加新的元素(之前有说过:列表的本质是链表,可以在原有列表的基础上直接更改)

  4. clear():清除列表中的元素。

  5. copy():浅拷贝,地址赋值,让两个变量指向同一个地址。之后会有浅拷贝和深拷贝详解(有一定C++基础的同学应该有所了解)

  6. count(value):计算value在列表中出现的次数。

  7. extend(iterable):将参数中的元素追加到原列表后,实质上,就是在函数里面用了for循环 ===》

1 li = ["adsf", 123, 34, "234"]
2 li.extend("asdfasdf")   # 参数为字符串类型
3 print(li)   # 输出结果为:['adsf', 123, 34, '234', 'a', 's', 'd', 'f', 'a', 's', 'd', 'f']
4 # 重置li的值
5 li = ["adsf", 123, 34, "234"]
6 li.extend([123, 333])   # 参数为列表类型
7 print(li)   # 输出结果为:['adsf', 123, 34, '234', 123, 333]

 

  8. index():和字符串中的index()函数的作用和用法一样"基础篇_004_基本数据类型_几种重要函数的整理"(字符串,第7个函数),在[start, end)的范围中查找第一个value出现的索引,如果找不到则抛出异常。

  9. insert(index, value):在指定的索引位置插入指定的值。

  10. pop(index = None)和remove(value):两者都是移除元素,区别在于 ===》

--前者是移除指定索引位置上的元素(默认是尾部元素),然后返回被弹出的值;后者是移除列表中指定值的第一个元素(当列表中含有多个此元素时)。

--前者在参数不在范围内的时抛出“索引越界”的异常;后者在列表中没有这一参数时抛出“列表中找不到参数”异常。

--这里可能就会有一些拥有一定编程基础的同学发问:为什么Python要用两个函数来做,难道不能像Java一样用一个来解决吗?

--要解决这个提问,就要涉及到Java中的包装类的概念(提示:Integer和int,了解它就能想清楚了),所以不做过多的阐述,大家只需知道:在Python中,index索引是int类型的变量,如果说在列表中也有一个int变量,这时调用拥有两个重载的remove()函数,Python会知道是执行按索引删除还是按值删除吗?答案显然是否定的,所以Python会用两个函数完成这个功能,而不会重载函数。

  11. reverse():将列表倒置。

  12. sort(reverse = False):默认是从小到大排序,如果参数是reverse = True,就是从大到小排序。(这里面还有一些参数,涉及到函数和Lambda表达式,所以现在不做阐述,还有一个Python的内置函数:sorted()——builtins包中的一个方法,也可以用来排序)

 

----总结

--列表就是链表这种数据结构的一种实现,可以在原列表的基础上更改,不用想字符串类型那样重新创建。

--到现在为止,我们所接触到的删除方法有4种:

  1. 关键字:del

  2. 分割置为空:[i:j] = ""

  3. 清空列表:clear()

  4. 删除单个元素:pop()和remove()

 

posted @ 2020-02-07 22:52  BNTU  阅读(81)  评论(0编辑  收藏  举报