【Rollo的Python之路】Python:列表的学习笔记

时间:2022-12-12 21:37:53

 

  列表初识:

  列表是Python3 里面常见的一种数据类型之一,列表每个元素都分配一个数据用来索引,他的位置 是从0开始,第一个数据 是0,第二个数据是1,以此类推

  列表的表达形式是方括号表示,逗号隔开,列表类的元素不要求是统一的形式,可以是数字,也可以字符,或者是两的混合体。

  创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可

list1 = ["a","b","c","d","e","f"]
list2 = ["google","baidu","bingo","sina","facebook"]
list3 = [1,2,3,"A","B","C","google"]

  下面来我们来打印一下结果:

list1 = ["a","b","c","d","e","f"]
list2 = ["google","baidu","bingo","sina","facebook"]
list3 = ["1","2","3","A","B","C","google"]

print(list1)
print(list2)
print(list3)
#结果是:
['a', 'b', 'c', 'd', 'e', 'f']
['google', 'baidu', 'bingo', 'sina', 'facebook']
['1', '2', '3', 'A', 'B', 'C', 'google']

 

  列表的常见操作有:增、删、减、查

  A1  查看列表的方法:切片

  A.切片的方法来查看列表,第一个位置从0开始:

name = ['name1','name2','name3','name4','name5']

print(“name_first_date:”,name[0]) #取的第一个

  打印结果是:

name_first_date: name1

  B.第一个元素是:0位,第二个是:1位,第三个是2位。。。。。。以此类推。

name = ['name1','name2','name3','name4','name5']

print(name[1:3]) #这表示从第二个位置开始取,取后三个位,但是第三个位的第4个元素是不会取的,可以这记住:从第二个位置开始取,取到第三个元素

  打印结果是:

['name2', 'name3']

  C.想要把整个列表取完:

name = ['name1','name2','name3','name4','name5']

print(name[1:]) #整个列表取完,第二个位留空就行

  打印结果是:

['name2', 'name3', 'name4', 'name5']

  D.想要取到倒数第二值:

name = ['name1','name2','name3','name4','name5']

print(name[:-1]) #取到倒数第二值

  打印结果是:

['name1', 'name2', 'name3', 'name4']

  E.想要从左到右一个一个取值:

name = ['name1','name2','name3','name4','name5']

print(name[0::1]) #从左向右一个一个去取,这里的1代表:步长
print(name[1:-1:1]) #从name2,从左向右一个一个去取,取到倒数第二个值

  F.想要隔一个取,或隔二个取值:

name = ['name1','name2','name3','name4','name5']

print(name[1::2])  #从左到中隔一个去取
print (name[0::3]) #从左到中隔二个去取

  打印结果是:

['name2', 'name4']
['name1', 'name4']

  G:步长负数代表方向为从右向左:

name = ['name1','name2','name3','name4','name5','name6','name7']

print(name[3::-2]) #-2代表从右开始走,步长为2,读数也是从右往左走,3代表从name4开始,从右往左去取
print(name[2:1:-1]) #-1代表从右开始走,步长为1.读数是从name3开始,因为name3的索引值为2,取的范围是 name3-name2,但是不会取name2
print(name[5:2:-1])

  打印结果是:

['name4', 'name2']
['name3']
['name6', 'name5', 'name4']

  A2 查看列表的方法:index

Index 是取元素在列表中的位置。

    def index(self, *args, **kwargs): # real signature unknown
        """
        Return first index of value.
        
        Raises ValueError if the value is not present.
        """
        pass
name = ['name1','name2','name3','name4','name5','name6','name7']

print (name.index('name5'))

#结果是

4

  再来一组看看:

name = ['name1','name2','name3','name4','name5','name6','name7']

print (name.index('name2'))
print (name.index('name4'))
print (name.index('name5'))
print (name.index('name7'))
1
3
4
6

  A3 查看列表的方法:count,列表中元素出现的次数

  count 的英文解释是:

    def count(self, *args, **kwargs): # real signature unknown
        """ Return number of occurrences of value. """
        pass

我们来看代码:

message = [1,2,2,1,1,2,1,2,2,1,2,3,4,5,1,2,1,2]

print (message.count(2))

#结果是

8 #代表着message列表里面2这个元素出现了8次

 

  A4 查看列表的方法:in,查看一个元素是否出现在列表中

 

name = ['name1','name2','name3','name4','name5','name6','name7']

print ('name9' in name)

  打印结果是:

False

  B 增加列表的方法:

  B1.a.append()

a.append()方法是在列表的后最后一位加上一个元素

英文解释是:

    def append(self, *args, **kwargs): # real signature unknown
        """ Append object to the end of the list. """
        pass

 

请看代码:

name = ['name1','name2','name3','name4','name5','name6','name7']

name.append('name9')
print (name)

#执行结果

['name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7', 'name9']

直接在'name7'的后面加了一个‘name9’.能不能加两个呢?不能

name = ['name1','name2','name3','name4','name5','name6','name7']

name.append('name9','name10')
print (name)

#执行结果:

name.append('name9','name10')
TypeError: append() takes exactly one argument (2 given)

错误,append()只能加一个数据,给了两个,报错!!!

  B2.insert() 方法

如果我们要在列表的指定位置加入一个元素,就要用到insert 方法。

insert 英文解释是:在某个标志位前插入一个对象或元素。

  def insert(self, *args, **kwargs): # real signature unknown
        """ Insert object before index. """
        pass
name = ['name1','name2','name3','name4','name5','name6','name7']

name.insert(3,'Rollo.St')
print (name)

#执行结果:

['name1', 'name2', 'name3', 'Rollo.St', 'name4', 'name5', 'name6', 'name7']

也是只能插入一个对象,不能两个或多个:

name = ['name1','name2','name3','name4','name5','name6','name7']

name.insert(3,4,'Rollo.St','name11')
print (name)

#执行结果:

 name.insert(3,4,'Rollo.St','name11')
TypeError: insert() takes exactly 2 arguments (4 given)

  B3.extend() 方法

extend() 可以在一个列表的末尾追加另一个列表中的多个值。

    def extend(self, *args, **kwargs): # real signature unknown
        """ Extend list by appending elements from the iterable. """

我们来看演示代码:

name = ['name1','name2','name3','name4','name5','name6','name7']
name2 = [1,2,3,4,5]

name.extend(name2)

print (name)

#执行结果

['name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7', 1, 2, 3, 4, 5]
append,将对象直接添加到原数组尾部,不加修改,直接添加

extend,添加的对象被解析为iterable对象,将其中元素逐一添加到原数组尾部

文档中解析分别是:

extend: append object to end

append: extend list by appending elements from the iterable

 

  C.列表的修改


可以用找出索引位,直接换值。

 

name = ['name1','name2','name3','name4','name5','name6','name7']

name[0] = 1

#扫行结果:

[1, 'name2', 'name3', 'name4', 'name5', 'name6', 'name7']

 

name = ['name1','name2','name3','name4','name5','name6','name7']

name[0:2] = ['K1','K2'] #2个位,赋两个值。
print (name)

#执行结果:

['K1', 'K2', 'name3', 'name4', 'name5', 'name6', 'name7']

 

name = ['name1','name2','name3','name4','name5','name6','name7']

name[1:4] = ['X1','X2'] #从索引1到3位,也就是name2=X1,name3=X2,name4没有赋值,会被删除,这是少赋值的情况,被删除。
print (name)

#执行结果:

['name1', 'X1', 'X2', 'name5', 'name6', 'name7']

 

name = ['name1','name2','name3','name4','name5','name6','name7']

name[0:2] = ['V1','V2','V3'] #从0开始到1位,共2位要修改,多了一个V3。但是会加上去
print (name)

#执行结果:

['V1', 'V2', 'V3', 'name3', 'name4', 'name5', 'name6', 'name7']

  D.列表的排序

  D1 a.sort(),sort的用法:a.sort(cmp=None, key=None, reverse=False)

英文解释是:

    def sort(self, *args, **kwargs): # real signature unknown
        """ Stable sort *IN PLACE*. """
        pass

 

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']

name.sort()
print(name)

#执行结果:

['Yname6', 'Yname7', 'name1', 'name2', 'name3', 'name4', 'name5'] #按ASCII值排序

sort()里面还有可以带reverse,

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']

name.sort(reverse=True)
print(name)

#执行结果:

['name5', 'name4', 'name3', 'name2', 'name1', 'Yname7', 'Yname6']

  D2 reverse()

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']

name.reverse()
print(name)

#执行结果:

['Yname7', 'Yname6', 'name5', 'name4', 'name3', 'name2', 'name1']

  E.列表的删除方法:

  E1.remove(),只能删除一个值

    def remove(self, *args, **kwargs): # real signature unknown
        """
        Remove first occurrence of value.
        
        Raises ValueError if the value is not present.
        """
        pass

 

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']

name.remove(name[1])
print (name)

#执行结果:

['name1', 'name3', 'name4', 'name5', 'Yname6', 'Yname7']

 

 

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']

name.remove('name3')
print (name)

#执行结果:

['name1', 'name2', 'name4', 'name5', 'Yname6', 'Yname7'] #'name3'被删除了
name = ['name1','name2','name3','name4','name5','Yname6','Yname7']

name.remove('name3','name4') #remove两个值看看
print (name)

##执行结果:

name.remove('name3','name4')
TypeError: remove() takes exactly one argument (2 given) #只能一个,给了两个

  E2.pop(index),只指定位置删除

英文的解释:

    def pop(self, *args, **kwargs): # real signature unknown
        """
        Remove and return item at index (default last). #默认删除最后一个
        
        Raises IndexError if list is empty or index is out of range.
        """
        pass

 

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']

name.pop(5)
print (name)


#执行结果:

['name1', 'name2', 'name3', 'name4', 'name5', 'Yname7']

 

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']

get = name.pop(1)
print (get)

#执行结果:
name2

 

 

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']

name.pop()  #默认删除最后一个
print (name)

#执行结果:

['name1', 'name2', 'name3', 'name4', 'name5', 'Yname6']

 

  E3.del 删除

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']
del name
name = ['name1','name2','name3','name4','name5','Yname6','Yname7']
del name[3]

print(name)

#执行结果:

['name1', 'name2', 'name3', 'name5', 'Yname6', 'Yname7']

  E4.clear() 清空

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']
name.clear()
print(name)

#执行结果:

[]

  F.List copy()方法

name = ['name1','name2','name3','name4','name5','Yname6','Yname7']

name2 = name.copy()
print (name2)

#执行结果:

['name1', 'name2', 'name3', 'name4', 'name5', 'Yname6', 'Yname7']

 copy 要注意的两点:

1.0 copy()和直接=赋值的区别:

a=[0,1,2,3,4,5]
b=a
c=a.copy()

del a[1]  
'''
   各变量值为:
   a=[0, 2, 3, 4, 5]
   b=[0, 2, 3, 4, 5]
   c=[0, 1, 2, 3, 4, 5]
'''

b.remove(4)
'''
   各变量值为:
   a=[0, 2, 3, 5]
   b=[0, 2, 3, 5]
   c=[0, 1, 2, 3, 4, 5]
'''

c.append(9)
'''
   各变量值为:
   a=[0, 2, 3, 5]
   b=[0, 2, 3, 5]
   c=[0, 1, 2, 3, 4, 5, 9]
'''

可以看出,使用=直接赋值,是引用赋值,更改一个,另一个同样会变, 例子中的a,b改变两次都影响到了对方

copy() 则顾名思义,复制一个副本,原值和新复制的变量互不影响 「a,c」

2.0 copy() 只是是浅度复制

 

b = [{'name': 'soso', 'age': 23}, {'name': 'rollo', 'age': 15}]
c = b.copy()
del b[1]
b[0]['age'] = 19
print('b', b)
print('c', c)


#执行结果:

b [{'name': 'soso', 'age': 19}]
c [{'name': 'soso', 'age': 19}, {'name': 'rollo', 'age': 15}]]

可以看出,copy() 只是是浅度复制,修改列表不会互相影响,但是修改列表里面的对象会影响到对方列表里面对象