继续第六章 列表(列表常用方法-append-insert-pop-reverse-sort-sorted-index-join-extend、列表深拷贝浅拷贝、不可变列表字符串与普通列表比较、(not)in、is(not))
一、如果变量name_list是一个列表,使用dir(name_list)可以了解有哪些列表的方法可以使用,使用help(name_list.pop)可以了解具体每个方法的使用方式。
二、常用列表方法:
方法名称 | 方法用途 | 方法示例 |
---|---|---|
append(value) append(new_list) | 在列表末端增加元素值,或者在列表末端增加子列表从而形成嵌套列表 | name_list.append(35) name_list.append([4, 6, 7]) |
insert(i, value) | 在指定索引位置插入元素值 | name_list.insert(2, 'test') |
pop() pop(i) | 删除指定位置列表元素,若未指明所删除元素的位置,一律删除列表末端的元素,返回值为删除的元素内容 | value = name_list.pop() value = name_list.pop(3) |
remove(value) | 删除指定的元素值,如果列表内有相同的元素,则只删除第一个出现的元素,如果想要删除所有相同的元素,必须使用循环 | name_list.remove('apple') |
reverse() | 颠倒排序列表内元素,永久更改了列表内容。也可以用[::-1]方式取得列表颠倒排序,但不更改列表内容 | name_list.reverse() name_list[::-1] |
sort()
sort(reverse=True) | 对列表元素由小到大排序,如果增加参数“reverse=True”则对列表元素由大到小排序。这个方法对纯数值元素和纯英文字符串元素效果较好,经排序后原列表元素顺序被永久更改 | name_list.sort() name_list.sort(reverse=True) |
sorted(name_list) sorted(name_list,reverse=True) | 对列表元素由小到大排序,如果增加参数“reverse=True”则对列表元素由大到小排序。用新列表存储新的排序列表,同时原先列表的顺序将不更改 | new_list = sorted(name_list) new_list = sorted(name_list,reverse=True) |
i = name_list.index(value) | 返回特定元素内容第一次出现的索引值,如果元素内容不在列表会出现错误 | index = name_list.index('math') |
n = name_list.count(value) | 返回特定元素内容出现的次数 | n = name_list.count('math') |
char.join(seq) | 将列表的元素组成一个字符串,列表内元素值应该为字符串类型。char是组合后各元素间的分隔字符,可以是单一字符,也可以是字符串。seq表示参数必须是列表、元组等序列数据 | '\n'.join(name_list) '###'.join(name_list) |
listA.extend(listB) | 只适用2个列表连接,不能用在一般元素,同时在连接后,extend( )会将列表分解成元素,一一插入列表listA | name_list.extend(new_list) |
三、如果一个列表含有嵌套列表,比如 num =[1, 2, 3, [4, 5, 6]],可以用num[3][2]的方式来获取嵌套列表内的元素值。
四、列表的深拷贝与浅拷贝。Python可以使用id(变量)函数,获得变量的地址。
浅拷贝:如果使用 listB = listA 方式设定2个列表变量相等,相当于只是将变量地址复制给另一个变量。id(listA) 和 id(listB)的内存地址是一样的,修改其中一个列表变量的内容,另一个列表变量内容也会同步更新。
深拷贝:如果使用 listB = listA[:] 方式设定2个列表变量,则获得了另一个内存地址不同的列表,修改其中一个列表内容不会更改另一个列表内容。
sports1 = ['basketball', 'football']
sports2 = sports1 #浅拷贝
print("sports1地址:", id(sports1))
print("sports2地址:", id(sports2))
print("sports1内容:", sports1)
print("sports2内容:", sports2)
sports1.append('pingpong')
sports2.append('soccer')
print()
print("sports1地址:", id(sports1))
print("sports2地址:", id(sports2))
print("sports1内容:", sports1)
print("sports2内容:", sports2)
print("\n\n\n")
sports1 = ['basketball', 'football']
sports2 = sports1[:] #深拷贝
print("sports1地址:", id(sports1))
print("sports2地址:", id(sports2))
print("sports1内容:", sports1)
print("sports2内容:", sports2)
sports1.append('pingpong')
sports2.append('soccer')
print()
print("sports1地址:", id(sports1))
print("sports2地址:", id(sports2))
print("sports1内容:", sports1)
print("sports2内容:", sports2)
五、在Python的应用中可以将单一字符串当作是一个序列,这个序列是由字符(character)所组成,可想成字符序列。不过字符串与列表不同的是,字符串内的单一元素内容是不可更改的。可以使用索引值的方式取得字符串内容,索引方式则与列表相同,例如str[0]。列表切片的概念也可以应用在字符串,例如str[1:6:2]。除了会更改内容的列表函数或方法不可应用在字符串外,其他则可以用在字符串,例如len(str)、max(str)、min(str)。list( )函数可以将参数内的对象转成列表,例如name_list = list("Deep Learning")。字符串本身无法用切片方式更改内容,但是将字符串改为列表后,就可以使用切片更改列表内容了
x = list('Deep Learning')
print(x)
x[5:] = 'Mind'
print(x)
使用split( )可以将字符串以空格为分隔符,将字符串拆开,变成一个列表。如果字符串之间没有空格,则列表内元素就是一整个字符串,不是拆开的字符。
str1 = "Silicon Stone Education"
str2 = "DeepMind"
str3 = "深度大脑"
sList1 = str1.split()
sList2 = str2.split()
sList3 = str3.split()
print(str1, "列表内容是 ", sList1)
print(str2, "列表内容是 ", sList2)
print(str3, "列表内容是 ", sList3)
六、in和not in表达式主要是用于判断一个对象是否属于另一个对象,对象可以是字符串(string)、列表(list)、元组(Tuple) 、字典(Dict)等。语法格式如下:
boolean_value = obj1 in obj2 和 boolean_value = obj1 in obj2
这个功能一般更常见是用在判断某个元素是否存在列表中,如果不存在,则将它加入列表内
七、is和is not表达式用于比较两个对象是否相同,在此所谓相同并不只是内容相同,而是指对象变量指向相同的内存,对象可以是变量、字符串、列表、元组、字典:
boolean_value = obj1 is obj2 和 boolean_value = obj1 is not obj2
mysports = ['basketball', 'football']
sports1 = mysports
sports2 = mysports[:]
print("mysports地址: ", id(mysports), "内容是: ", mysports)
print("sports1地址: ", id(sports1), "内容是: ", sports1)
print("sports2地址: ", id(sports2), "内容是: ", sports2)
boolean_value = mysports is sports1
print("mysports = sports1: ", boolean_value)
print("mysports = sports2: ", mysports is sports2)
当我们在Python程序中设立变量时,如果两个整数(或浮点数)变量内容相同,它们会使用相同的内存地址存储此变量。
x = 10
y = 10
z = 15
print("x地址: ", id(x), "内容是: ", x)
print("y地址: ", id(y), "内容是: ", y)
print("z地址: ", id(z), "内容是: ", z)
print("x = y: ", x is y)
print("x = z: ", x is z)
z = z - 5
print("x地址: ", id(x), "内容是: ", x)
print("y地址: ", id(y), "内容是: ", y)
print("z地址: ", id(z), "内容是: ", z)
print("x = y: ", x is y)
print("x = z: ", x is z)