基础篇_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()