Python3学习之路~2.1 列表、元组操作

列表

列表是我们以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作。

定义列表(list)

names=['Amy','Bob','Cindy','David']

通过下标访问列表中的元素,下标从0开始计数,还可以倒着取

>>> names[0]
'Amy'
>>> names[1]
'Bob'
>>> names[-1]
'David'
>>> names[-2]
'Cindy'

切片:取多个元素

>>> names=['Amy','Bob','Cindy','David','Eric','Frank']
>>> names[1:4]    #取下标1至下标4之间的数字,包括1,不包括4
['Bob', 'Cindy', 'David']
>>> names[1:-1] #取下标1至-1(最后一个)的值,不包括-1
['Bob', 'Cindy', 'David', 'Eric']
>>> names[0:3]    
['Amy', 'Bob', 'Cindy']
>>> names[:3]    #如果是从头开始取,0可以忽略,跟上句效果一样
['Amy', 'Bob', 'Cindy']
>>> names[3:]    #如果想取最后一个,必须不能写-1,只能这么写
['David', 'Eric', 'Frank']
>>> names[3:-1]    #这样-1就不会被包含了
['David', 'Eric']
>>> names[0::2]    #后面的2代表每隔一个元素就取一个
['Amy', 'Cindy', 'Eric']
>>> names[::2]    #0可以忽略,和上句效果一样
['Amy', 'Cindy', 'Eric']
View Code

追加

>>> names
['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank']
>>> names.append("Serena")    #追加元素会放在列表的最后一个
>>> names
['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', 'Serena']
View Code

插入

>>> names
['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', 'Serena']
>>> names.insert(2,'Olivia') #强行从Cindy前面插入
>>> names
['Amy', 'Bob', 'Olivia', 'Cindy', 'David', 'Eric', 'Frank', 'Serena']
>>> names.insert(5,'Anna')
>>> names
['Amy', 'Bob', 'Olivia', 'Cindy', 'David', 'Anna', 'Eric', 'Frank', 'Serena']
View Code

修改

>>> names
['Amy', 'Bob', 'Olivia', 'Cindy', 'David', 'Anna', 'Eric', 'Frank', 'Serena']
>>> names[2]='Tim'    #将Olivia修改为Tim
>>> names
['Amy', 'Bob', 'Tim', 'Cindy', 'David', 'Anna', 'Eric', 'Frank', 'Serena']
View Code

删除

>>> names
['Amy', 'Bob', 'Tim', 'Cindy', 'David', 'Anna', 'Eric', 'Frank', 'Serena']
>>> del names[2]
>>> names
['Amy', 'Bob', 'Cindy', 'David', 'Anna', 'Eric', 'Frank', 'Serena']
>>> del names[4]
>>> names
['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', 'Serena']
>>> names.remove("David")    #删除指定元素
>>> names
['Amy', 'Bob', 'Cindy', 'Eric', 'Frank', 'Serena']
>>> names.pop()    #删除列表最后一个值 
'Serena'
>>> names
['Amy', 'Bob', 'Cindy', 'Eric', 'Frank']
>>> names.pop(1)    #删除列表第二个值 
'Bob'
>>> names
['Amy', 'Cindy', 'Eric', 'Frank']
>>> names.clear()    #清空列表
>>> names
[]
>>> del names    #删除列表
>>> names
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'names' is not defined
View Code

扩展

>>> names=['Amy','Bob','Cindy','David','Eric','Frank']
>>> b=[1,2,3]
>>> names.extend(b)
>>> names
['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', 1, 2, 3]
View Code

拷贝

>>> import copy
>>> names=['Amy','Bob','Cindy',['David','Eric'],'Frank']
>>> names_copy_1=names.copy()    #浅拷贝,只拷贝第一层,可以看做拷贝了第二层的内存地址
>>> names_copy_2=names    #names_copy_2和names完全一致,names修改,names_copy_2也跟着修改
>>> names_copy_3=copy.copy(names)    #浅拷贝,与names.copy()效果完全一致
>>> names_copy_4=names[:]    #完全切片的形式创建浅拷贝,与names.copy()效果完全一致
>>> names_copy_5=list(names)    #工厂函数的形式创建浅拷贝,与names.copy()效果完全一致
>>> names_copy_6=copy.deepcopy(names)    #深拷贝,names_copy与names完全独立
>>> names
['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank']
>>> names_copy_1
['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank']
>>> names_copy_2
['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank']
>>> names_copy_3
['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank']
>>> names_copy_4
['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank']
>>> names_copy_5
['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank']
>>> names_copy_6
['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank']
>>> names[2]="森碟"
>>> names[3][0]="DAVID"
>>> names
['Amy', 'Bob', '森碟', ['DAVID', 'Eric'], 'Frank']
>>> names_copy_1
['Amy', 'Bob', 'Cindy', ['DAVID', 'Eric'], 'Frank']
>>> names_copy_2
['Amy', 'Bob', '森碟', ['DAVID', 'Eric'], 'Frank']
>>> names_copy_3
['Amy', 'Bob', 'Cindy', ['DAVID', 'Eric'], 'Frank']
>>> names_copy_4
['Amy', 'Bob', 'Cindy', ['DAVID', 'Eric'], 'Frank']
>>> names_copy_5
['Amy', 'Bob', 'Cindy', ['DAVID', 'Eric'], 'Frank']
>>> names_copy_6
['Amy', 'Bob', 'Cindy', ['David', 'Eric'], 'Frank']
View Code
>>> person=['name',['money',100]]
>>> p1=person[:]
>>> p2=person[:]
>>> p1[0]='husband'
>>> p2[0]='wife'
>>> p1[1][1]=50
>>> p1
['husband', ['money', 50]]
>>> p2
['wife', ['money', 50]]
>>>
浅拷贝应用:比如创建联合账号,夫妻二人共同财产100元,丈夫花了50元,则丈夫妻子的共同财产均只剩下50元

统计

>>> names=['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Amy', 'Frank', 1, 2, 3]
>>> names.count("Amy")
2
View Code

排序&反转

>>> names
['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Amy', 'Frank', 1, 2, 3]
>>> names.sort()    #排序
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str'    #3.0里不同数据类型不能放在一起排序了
>>> names[-3]='1'
>>> names[-2]='2'
>>> names[-1]='3'
>>> names.append('#')
>>> names.append('bob')
>>> names.append('amy')
>>> names
['1', '2', '3', 'Amy', 'Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', '#', 'bob', 'amy']
>>> names.sort()    #按照ASCII码顺序排序,一般顺序为:特殊字符、数字、大写字母、小写字母
>>> names
['#', '1', '2', '3', 'Amy', 'Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Frank', 'amy', 'bob']
>>> names.reverse()    #反转
>>> names
['bob', 'amy', 'Frank', 'Eric', 'David', 'Cindy', 'Bob', 'Amy', 'Amy', '3', '2', '1', '#']
View Code

获取下标

>>> names=['Amy', 'Bob', 'Cindy', 'David', 'Eric', 'Amy', 'Frank', 1, 2, 3]
>>> names.index("Amy")    #只返回找到的第一个下标
0
View Code

列表循环

>>> names=['Amy','Bob','Cindy',['David','Eric'],'Frank']
>>> for i in names:
...     print(i)
...
Amy
Bob
Cindy
['David', 'Eric']
Frank
View Code

 列表循环取出元素以及下标

>>> list=['a','b','c']
>>> for item in list:
...     print(list.index(item),item)    #方法1
...
0 a
1 b
2 c
>>> for i in enumerate(list):
...     print(i)    #方法2
...
(0, 'a')
(1, 'b')
(2, 'c')
>>> for index,item in enumerate(list):
...     print(index,item)    #方法3
...
0 a
1 b
2 c
View Code

元组

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表。

定义元组(tuple)

names=('Amy','Bob','Cindy','David')

它只有2个方法,一个是count,一个是index。

>>> names=('Amy','Bob','Cindy','Amy','David')
>>> names.count('Amy')    #统计
2
>>> names.index('Amy')    #获取下标,只返回找到的第一个下标
0

猜你喜欢

转载自www.cnblogs.com/zhengna/p/9155550.html