python基础之列表

切片

Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。

     格式:【start:end:step】

     start:起始索引,从0开始,-1表示结束

     end:结束索引(切片的结果不包含结束索引)

     step:步长,end-start,步长为正时,从左向右取值。步长为负时,反向取值
实例

list=['a','b','c','d','e','f','g','h','i','j','k']
print(f'1.{list[5:10:1]}') #从位置5开始,每次增加1截取,不包含结束索引
print(f'2.{list[5::-1]}')  #反向取值
print(f'3.{list[:3]}')  #省略起始位置的索引,以及步长。默认起始位置从头开始,默认步长为1,结束位置索引为3
print(f'4.{list[3:]}')  #省略结束位置的索引,以及步长,默认步长为1,截取剩余元素

运行结果

1.['f', 'g', 'h', 'i', 'j']
2.['f', 'e', 'd', 'c', 'b', 'a']
3.['a', 'b', 'c']
4.['d', 'e', 'f', 'g', 'h', 'i', 'j', 'k']

插入元素

insert方法用于在列表中插入一个元素,而append方法用于在列表的末尾追加一个元素

实例

list=['a','b','c','d','e','f','g','h','i','j','k']
list.insert(2,'小明')
print(list)
list.append('旺财')
print(list)

运行结果

['a', 'b', '小明', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
['a', 'b', '小明', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', '旺财']

修改元素

实例

list=['a','b','c','d','e','f','g','h','i','j','k']
list[0]='小明'
print('第一次修改',list)
list[0:2]=['旺','财']
print('第二次修改',list)

运行结果

第一次修改 ['小明', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
第二次修改 ['旺', '财', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']

删除

list.remove(x)  从列表中删除第一个次出现在列表中的值
del语句      del 序列[整数表达式],del 序列[切片]
list.pop([index]) 删除索引对应的元素,如果不加索引,默认删除最后元素,同时返回移除元素

实例

list=['a','b','c','d','e','f','g','h','i','j','k']
list.remove('a')
print('第一次删除后',list)
del list[0]
print('第二次删除后',list)
del list[0:2]
print('第三次删除后',list)
c=list.pop(0)
print('第四次删除后',list,f'删除的元素为{c}')
d=list.pop()
print('第五次删除后',list,f'删除的元素为{d}')

运行结果

第一次删除后 ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
第二次删除后 ['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
第三次删除后 ['e', 'f', 'g', 'h', 'i', 'j', 'k']
第四次删除后 ['f', 'g', 'h', 'i', 'j', 'k'] 删除的元素为e
第五次删除后 ['f', 'g', 'h', 'i', 'j'] 删除的元素为k

  列表中其他操作

count  count 方法统计某个元素在列表中出现的次数

实例

list=['a','b','c','a','e','a','g','h','i','j','k']
print('列表中a的数量为:',list.count('a'))

运行结果

列表中a的数量为: 3

extend   extend 方法可以在列表的末尾一次性追加另一个可迭代对象的多个值,单个字符也是可迭代对象(例如:'a')

实例

a=[1,2,3]
b=[4,5,6]
print(f'连接操作"+"会返回新的列表:{a+b}')
print(f'列表a为{a}')

a.extend(b)
print(f'entend只修改被扩展的列表:扩展后的列表a为{a}')

运行结果

连接操作"+"会返回新的列表:[1, 2, 3, 4, 5, 6]
列表a为[1, 2, 3]
entend只修改被扩展的列表:扩展后的列表a为[1, 2, 3, 4, 5, 6]

index  index 方法用于从列表中找出某个值第一个匹配项的索引位置

实例

list=['a','b','c','a','e','a','g','h','i','j','k']
print(list.index('a'))     #不输入查找范围,默认从头查找

print(list.index('a',4,9)) #查找列表中位置在4-9之间元素的位置,不存在所查找元素时报错

运行结果

0
5

reverse  将列表中的元素反转

实例

list=['a','b','c','d','e','f','g','h','i','j','k']
list.reverse()
print(list)

运行结果

['k', 'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']

sort  列表排序

实例

list=[1,3,5,7,8,9,2,4,6]
list.sort(reverse=False)   #默认升序排列reverse=False,要想升序排列将False改为True即可
print(list)

运行结果

[1, 2, 3, 4, 5, 6, 7, 8, 9]

 列表中变量与内存关系

  • copy的是内存地址,引用的是列表的引用地址,列表里存的是各个元素的地址

  • 列表中的元素地址没变,列表中的内存地址也不会发生改变

  • 列表中的元素地址发生改变,列表中的内存地址也将改变

实例(浅拷贝)

ps:注意浅拷贝与同义词复制的区别

name1=['a','b','c','d',['e','f','g']]
name2=name1.copy()    #浅拷贝
name1[1]='X'
name1[-1][-1]='Z'     
print(name1)
print(name2)
print(f'name1中元素Z的内存地址:{id(name1[-1][-1])},元素Z是内存地址:{id("Z")}')
print(f'name2中元素Z的内存地址:{id(name2[-1][-1])}')

运行结果

['a', 'X', 'c', 'd', ['e', 'f', 'Z']]
['a', 'b', 'c', 'd', ['e', 'f', 'Z']]
name1中元素Z的内存地址:1726784480120,元素Z是内存地址:1726784480120
name2中元素Z的内存地址:1726784480120  

name2=name1.copy()copy的是name中列表的内存地址

在Python中,copy的是内存地址,引用的是列表的引用地址,列表里存的是各个元素的地址

那么如何将一个嵌套列表完整的copy过来呢(即修改嵌套列表name1中的数据,列表name2中的数据不会变动),我们需要导入一个copy模块

实例

import copy
name1=['a','b','c','d',['e','f','g']]
name2=copy.deepcopy(name1)
name1[1]='X'
name1[-1][-1]='Z'       #修改name1中的g元素
print(name1)
print(name2)

运行结果

['a', 'X', 'c', 'd', ['e', 'f', 'Z']]
['a', 'b', 'c', 'd', ['e', 'f', 'g']]

  

posted @ 2018-11-19 00:57  wxinh  阅读(171)  评论(0编辑  收藏  举报