pythoy 列表学习笔记

'''
1,列表的创建与删除
2,列表的查询操作
3,列表元素的增删改操作
4,列表元素的排序
5,列表推导式
为什么需要列表?
变量可以存储一个元素,列表是一个大容器,可以存储N个元素,程序可以方便地对这些数据进行整体操作
列表相当于其他语言中的数组
索引   -7       -6      -5   -4  -3     -2  -1
数据  'hello' 'world'  123   34  12.3   12  'world'
索引    0      1        2    3   4      5   6
'''

lst = ['hello', 'world', 123, 65.7]
print(id(lst))  # 1934092996224
print(type(lst))  # <class 'list'>
print(lst)  # ['hello', 'world', 123, 65.7]

print(id(lst[0]))
print(type(lst[0]))
print(lst[0])

print(id(lst[-4]))
print(type(lst[-4]))
print(lst[-4])
# 创建列表的第一种方式
lst1 = ['hello', 'world', 123, 65.7]

# 创建列表的第2种方式list()
lst2 = list(['hello', 'world', 123, 65.7])

# 创建列表的第2种方式list()

'''
列表的特点:
1,列表元素按顺序有序排序
2,索引映射唯一一个数据
3,列表可以存储重复数据
4,任意数据混存
5,根据需要动态分配和回收内存

索引   -7       -6      -5    -4  -3     -2  -1
数据  'hello' 'world'  123   34  12.3   12  'world'
索引    0      1        2    3   4      5    6

正向索引从 0 ~ N-1  如: lst[0]
逆向索引从—N ~ -1   如: lst[—N]

'''

print("======================48集 列表的查寻操作========================")
'''
获取列表中指定元素的索引
index():  查询列表中存在N个相同元素,只返回相同元素中的第一个元素的索引
          如果查询的元素在列表中不存在,则会抛出ValueError
          还可以在指定的satrt和stop之间进行查找
                   
获取列表中的单个元素
正向索引从 0 ~ N-1  如: lst[0]
逆向索引从—N ~-1    如: lst[—N]
指定索引不存在,则会抛出ValueError

'''
lst = ["hello", "world", 98, "hello"]
print(lst.index('hello'))  # 0 查询列表中存在N个相同元素,只返回相同元素中的第一个元素的索引
# print(lst.index('python'))  # ValueError: 'python' is not in list  如果查询的元素在列表中不存在,则会抛出ValueError
# print(lst.index('hello', 1, 3))  #   从第一个位置开始到索引为3的地方查找,但是不包括3 ValueError: 'hello' is not in list
print(lst.index('hello', 1, 4))

'''
列表切片语法格式
列表名[start : stop : step]

    索引     -9 -8 -7 -6 -5 -4 -3 -2 -1
             [1, 2, 3, 4, 5, 6, 7, 8, 9]
     索引     0  1  2  3  4  5  6  7  8

'''
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print('源列表', id(lst))
# start =1,stop =6,step=1
print(lst[1:6:1])  # [2, 3, 4, 5, 6]   从索引为1开始,到第5个结束,不包括6,步长为1
print(lst[1:6:])   #冒号后面不写也代表步长为1
print('切的列表片段', id(lst[1:6:1])) #拷贝出来的内容存到新地方
# start =1,stop =6,step=2
print(lst[1:6:2]) #[2, 4, 6]

# stop =6,step=2
print(lst[:6:2]) #[1, 3, 5]  缺start 则从第0个索引开始

# start =1,step=2
print(lst[1::2]) #stop没有指定,则一直到最后


'''
step为负数  :
             [:stop:step]  切片的第一个元素默认是列表的最后一个元素,从start开始往前计算切片
             [start::step]  切片的第一个元素默认是列表的第一个元素,从start开始往前计算切片
     索引     -9 -8 -7 -6 -5 -4 -3 -2 -1
             [1, 2, 3, 4, 5, 6, 7, 8, 9]
     索引      0  1  2  3  4  5  6  7  8
             
'''
print('源列表', lst)#源列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(lst[::-1])#         [9, 8, 7, 6, 5, 4, 3, 2, 1]
# start =7,stop 省略,step=-1
print(lst[7::-1]) #[8, 7, 6, 5, 4, 3, 2, 1]
# start =6,stop=0 ,step=-2
print(lst[6:0:-2])#[7,5,3]  不包括 stop 对应的索引位置


'''
判断指定元素在列表中是否存在
元素 in 列表名
元素 not in 列表名

列表元素的遍历
for 迭代变量 in 列表名
'''
print('p' in 'python')
print('k' not in 'python')

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(10 in lst)
print(100 not in lst)

for i in lst:
    print(i, end='\t')

print('===========52集==========')
'''
列表元素的增加操作
append() 在列表的末尾添加一个元素
extend() 在列表的末尾至少添加一个元素(一次添加多个)
insert() 在列表的任意位置添加一个元素
切片      在列表的任意位置至少添加一个元素
'''

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print('添加之前',lst,id(lst))
lst.append(20)  #在列表的末尾添加一个元素
print('添加之后',lst,id(lst))
lst2 =['hello','world']
lst.append(lst2) #将lst2作为一个元素,添加在列表的末尾
print('添加之后',lst,id(lst)) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, ['hello', 'world']] 2186363080320

lst.extend(lst2)#将lst2里的每一个元素,添加在列表的末尾
print('添加之后',lst,id(lst))# 添加之后 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, ['hello', 'world'], 'hello', 'world'] 1800063880832

lst3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print('添加之前',lst3,id(lst3))
lst3.insert(1,12)
print('添加之后',lst3,id(lst3))

lst4 = [True,False,'he']
lst3[1:]=lst4  #把第1个位置向后的所有元素都切掉,并把lst4 的元素放到1的位置上
print('添加之后',lst3,id(lst3))#  添加之后 [1, True, False, 'he'] 2262640187392


'''
53.列表元素的删除操作

remove()  一次删除一个元素
          重复元素只删除第一个
          元素不存在抛出ValueError
          
pop()     删除一个指定索引位置的元素
          如果指定索引不存在抛出ValueError
          不指定索引,删除最后一个元素
          
切片     一次至少删除一个元素,将产生一个新的列表对象

clear() 清空列表

del     删除列表
'''
lst3 = [1, 2, 3, 3, 5, 6, 7, 8, 9, 10]
lst3.remove(3)  # 一次删除一个元素,重复元素只删除第一个
print(lst3)  # [1, 2, 3, 5, 6, 7, 8, 9, 10]
# lst3.remove(100) #不存在抛出ValueError: list.remove(x): x not in list
lst3.pop(1)  # 删除一个指定索引位置的元素
print(lst3)  # [1, 3, 5, 6, 7, 8, 9, 10]
lst3.pop()  # 不指定索引,删除最后一个元素
print(lst3,id(lst3))  # [1, 3, 5, 6, 7, 8, 9]  1131877327936

new_list = lst3[1:3] #一次至少删除一个元素,将产生一个新的列表对象
print(new_list,id(new_list)) # [3, 5] 1131877390720

print('=================================')
'''
不产生新的列表对象,而是删除原来列表中的内容
'''
lst3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(lst3,id(lst3))#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 2494568294784
lst3[1:3] =[] # 使用空列表将原来列表的这个切片位置替代
print(lst3,id(lst3))#[1, 4, 5, 6, 7, 8, 9, 10] 2494568294784
lst3.clear()
print(lst3,id(lst3))#[] 1908272757184

del lst3
print(lst3,id(lst3)) #NameError: name 'lst3' is not defined
lst = [10, 20, 30, 40, 50, 60, 70]
print(lst)
lst[2] = 100
print(lst)
lst[1:3] = ['a', 'b', 'c']  # 索引为1和2位置的元素被替换,不包含索引3
print(lst)  # [10, 'a', 'b', 'c', 40, 50, 60, 70]

print('=========列表的排序操作================')
lst = [10, 20, 30, 40, 50, 60, 70]
print(lst, id(lst))
lst.reverse()
print(lst, id(lst))
lst.sort()
print(lst, id(lst))
# 通过指定关键字参数,将列表中的元素进行降序排序
lst.sort(reverse=True)  # 降序排序
print(lst, id(lst))
lst.sort(reverse=False)
print(lst, id(lst))  # 默认升序排序
print("====使用内置函数sorted()对列表进行排序,将产生一个新的列表对象,原列表不发生改变=================")
lst = [10, 70, 40, 20, 50, 60, 30]
print(lst, id(lst))
new_list = sorted(lst)
print(lst, id(lst))  # 源列表没有任何变化
print(new_list, id(new_list))
new_list = sorted(lst, reverse=True)  # 降序排序
print(lst, id(lst))  # 源列表没有任何变化
print(new_list, id(new_list))

print('======列表生成式=========')
'''
语法:
[i*i  for  i in range(1,10)]
i*i 表示列表元素的表达式
range(1,10) 可迭代对象
注意:表示列表元素的表达式中,通常包含自定义变量
'''

lst = [i for i in range(1, 10)]  # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(lst, id(lst))
lst = [i * i for i in range(1, 10)]  # 每次取出的数字是i,for前面的表达式是列表元素的表达式
print(lst, id(lst))

lst1 = [i*2 for i in range(1, 6)]
print(lst1, id(lst1)) #[2, 4, 6, 8, 10] 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aFakeProgramer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值