【python学习笔记】列表
列表
1.创建列表
>>> num = [1,2,3,4,5,6]
mix = [1,'美女',3.14,[1,2,3,4,5,6]]
empty = []
2.添加元素
----append()方法:向列表末尾添加单个元素
>>> num = [1,2,3,4,5,6]
>>> num.append(7)
>>> num
[1, 2, 3, 4, 5, 6, 7]
append()不能添加多个元素
>>> num.append(8,9)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: append() takes exactly one argument (2 given)
----extend()方法:向列表末尾添加多个元素
>>> num = [1,2,3,4,5,6,7]
>>> num.extend([8,9])
>>> num
[1, 2, 3, 4, 5, 6, 7, 8, 9]
事实上extend()方法是使用一个列表来扩展另一个列表,因此参数是列表,而不是单个元素
----insert()方法:两个参数,第一个是代表列表中的位置,第二个是在这个位置处插入一个元素
>>> num.insert(1,0)
>>> num
[1, 0, 2, 3, 4, 5, 6, 7, 8, 9]
3.获取元素
通过元素的索引值从列表中获取单个元素,注意列表的索引是从0开始的
>>> name = ['字母罗','煤球','内马尔','萨拉赫']
>>> name[0]
'字母罗'
>>> name[2]
'内马尔'
当然可以进行位置互相调换
>>> name[1],name[3] = name[3],name[1]
>>> name
['字母罗', '萨拉赫', '内马尔', '煤球']
4.删除元素
----remove()
特点:①只需要知道列表中存在要删除的元素即可,若要删除的元素不再列表中,则会报错 ②不能指定删除某个位置的元素
>>> name.remove('字母罗')
>>> name
['萨拉赫', '内马尔', '煤球']
>>> name.remove('大宝')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
----del:是个语句,并不是列表的方法
>>> del name[1]
>>> name
['萨拉赫', '煤球']
>>> del name
>>> name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'name' is not defined
----pop()方法:‘弹出’元素
>>> name = ['字母罗','煤球','内马尔','萨拉赫']
>>> name.pop()
'萨拉赫'
>>> name.pop()
'内马尔'
>>> name
['字母罗', '煤球']
>>>
pop()默认是弹出列表最后一个元素,不过也可以加上索引值作为参数,弹出指定元素
>>> name = ['字母罗','煤球','内马尔','萨拉赫']
>>> name.pop(2)
'内马尔'
>>> name
['字母罗', '煤球', '萨拉赫']
5.列表分片(slice)
利用列表分片,可以获取多个元素
列表分片就是建立在原列表的一个拷贝,得到一个新的列表
>>> name[0:2]
['字母罗', '煤球']
>>> name
['字母罗', '煤球', '内马尔', '萨拉赫']
>>> name[:2]
['字母罗', '煤球']
>>> name[1:]
['煤球', '内马尔', '萨拉赫']
>>> name[:]
['字母罗', '煤球', '内马尔', '萨拉赫']
结束位置的元素不包含。默认开始位置是0,结束位置去掉后默认为到末尾的所有元素
第三个参数,步长
>>> list1 = [1,2,3,4,5,6,7,8,9]
>>> list1[0:9:2]
[1, 3, 5, 7, 9]
>>> list1[::2]
[1, 3, 5, 7, 9]
>>> list1[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>>
6.列表与常用的操作符
>>> list1 = [123]
>>> list2 = [234]
>>> list1 > list2
False
>>> list3 = ['abc']
>>> list4 = ['bcd']
>>> list3 < list4
True
字符串的比较是第一个字符对应的ASCII码值得大小
>>> list1 = [123,456]
>>> list2 = [234,123]
>>> list1 > list2
False
当列表中包含多个元素时,从第一个元素开始比较,第一个赢了,整个列表就赢了
---加法(+):连接操作符,相当于extend()实现的效果
>>> list1 = [123,456]
>>> list2 = [234,567]
>>> list3 = list1 + list2
>>> list3
[123, 456, 234, 567]
>>>
---乘号(*):重复操作符>>> list1 = [123]
>>> list1 * 3
[123, 123, 123]
>>> list1 *= 5
>>> list1
[123, 123, 123, 123, 123]
>>>
---成员关系操作符:in 和not in
>>> name = ['字母罗', '煤球', '内马尔', '萨拉赫']
>>> '大宝' in name
False
>>> '煤球' not in name
False
>>> name = ['字母罗', '煤球', ['老司机','壕人'],'内马尔', '萨拉赫']
>>> '老司机' in name
False
>>> '老司机' not in name
True
>>> '老司机' not in name[2]
False
>>> '老司机' in name[2]
True
>>>
二维数组可以这样访问:>>> name[2][0]
'老司机'
>>>
7.列表的一些方法
>>> dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>>
----count()方法:计算它的参数在列表中出现的次数
>>> list1 = [1,1,2,3,5,8,13,19]
>>> list1.count(1)
2
----index():返回它的参数在列表中的位置
>>> list1.index(1)
0
>>> start = list1.index(1) + 1
>>> stop = len(list1)
>>> list1.index(1,start,stop)
1
>>>
也可以这样查找后续的目标位置
---reverse():将整个列表原地翻转
>>> list1 = [1,2,3,4,5,6,7,8,9]
>>> list1.reverse()
>>> list1
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>>
---sort():用指定方式队对列表的成员进行排序,默认不需要参数,从小到大排列
>>> list1 = [8,6,4,3,10,15,1]
>>> list1.sort()
>>> list1
[1, 3, 4, 6, 8, 10, 15]
>>>
sort(func,key,reverse),三个参数
sort的默认值为sort(reverse=False),表示不颠倒顺序
将列表从小到大进行排序:
>>> list1 = [8,6,4,3,10,15,1]
>>> list1.sort(reverse=True)
>>> list1
[15, 10, 8, 6, 4, 3, 1]
8.再谈分片"拷贝"
>>> list1 = [1,2,3,4,5,6]
>>> lsit2 = list1[:]
>>> list2 = list1[:]
>>> list3 = list1
>>>
>>> list1.append(7)
>>> list1
[1, 2, 3, 4, 5, 6, 7]
>>> list2
[1, 2, 3, 4, 5, 6]
>>> list3
[1, 2, 3, 4, 5, 6, 7]
>>>
① list1和list2指向的都是同一个列表,如果列表变化,则list1和list2都会变化,并不是独立的
② list2属于从从list1分片得到的,也就是拷贝得到的新列表
作业题:
1.列表内可以存放的东西?
列表内可以存放各种类型的数据
2.向列表增加元素有哪些方法?
append():向列表尾部增加单个元素
extend():参数为列表,向列表尾部增加一个列表的元素
insert():两个参数,第一个是列表中的位置,第二个是要增加的元素
3.append()方法和extend()方法都是向列表的末尾增加元素,请问有什么区别?
append():向列表尾部增加单个元素
extend():参数为列表,向列表尾部增加一个列表的元素
4.member.append(['竹林小溪','小桥流水'])和member.extend(['竹林小溪','小桥流水'])实现的效果是一样的吗
举例说明:
>>> list1 = [1,2,3,4,5,6]
>>> list1.append([7,8])
>>> list1
[1, 2, 3, 4, 5, 6, [7, 8]]
>>>
>>>
>>> list1 = [1,2,3,4,5,6]
>>> list1.extend([7,8])
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
>>>
明显是不同的
5.有列表name = ['M','E','A','T'],如果想在'E'和'A'之间插入元素'S',应该怎么插入?
>>> name = ['M','E','A','T']
>>> name.insert(2,'S')
>>> name
['M', 'E', 'S', 'A', 'T']
>>>
6.将member = ['字母罗', '煤球', '内马尔', '萨拉赫']修改为member = ['字母罗',87, '煤球',89 ,'内马尔',86, '萨拉赫',80]
member.insert(1,87)
member.insert(3,89)
member.insert(5,86)
member.append(80)
利用for循环打印member列表中的每个内容
>>> member = ['字母罗',87, '煤球',89 ,'内马尔',86, '萨拉赫',80]
>>> for each in member:
... print(each)
...
字母罗
87
煤球
89
内马尔
86
萨拉赫
80
>>>
打印方式变更为['人名','分数']
count = 0
length = len(member)
while count < length:
print(member[count],member[count+1])
count += 2
for each in range(len(member)):
if each%2 == 0:
print(member[each],member[each+1])
7.请问如何将下边这个列表中的'美女'修改为'帅哥'?
list1 = [1,[1,2,['美女']],3,5,8,13,18]
>>> list1 = [1,[1,2,['美女']],3,5,8,13,18]
>>> list1[1][2][0] = '帅哥'
>>> list1
[1, [1, 2, ['帅哥']], 3, 5, 8, 13, 18]
8.要对一个列表进行顺序排序,请问用什么方法?
sort()方法
9.要对一个列表进行逆序排序,请问使用什么方法?
sort(reverse=True)
10.列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() 和 clear()
>>> list1 = [1,2,3,4,5]
>>> list2 = list1.copy()
>>> list2
[1, 2, 3, 4, 5]
>>> list1.sort(reverse=True)
>>> list1
[5, 4, 3, 2, 1]
>>>
>>> list3 = list2.clear()
>>> list3
>>> list2
[]
>>> list1
[5, 4, 3, 2, 1]
>>>
11.请将下方的列表推导式还原出来?
list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]
list1 = []
for x in range(10):
for y in range(10):
if x % 2 ==0:
if y % 2 ==0:
list.append((x,y))