python王者归来—学习笔记(7)

继续第六章  列表(列表常用方法-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( )会将列表分解成元素,一一插入列表listAname_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)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值