Python—列表list的基础知识

列表

列表使用方括号括起来的[],每个元素以逗号分割;

可以储存不同的数据类型数据

特点:

  • 是一个有序的
  • 可以重复的
  • 可变类型

创建

  • 创建空列表
li=[]
print(type(li))
  • 创建多元素列表
li=[1,2,3,"acc","city","college",["I","am"]]
  • 强转
sr="ab"
li=list(sr)
print((li,type(li)))

(1)拼接

li1=["1"]
li2=["x"]
print(li1+li2)

(2)重复

print(li1*3)

(3)索引(偏移)[],切片[:],[::]

li=['c','i','t','y','1','9','0','9']
print((li[0],li[5]))
print(li[:5])
print(li[::-1])
print(li[2][0])

demo:

sr="城市学院"
li=[]
for i in sr:
    li.append(ord(i))
print(li)

(4)列表的常见操作

增删改查

  • append() 将这个整体放入
  • extend() 每个元素取出再放入
  • insert() 按照给的位置放入
li=['c','i','t','y','1','9','0','9']
li1=['a','b','c']
li2=[]
li.append(li1)
li2.extend(li1)
li2.insert(1,li1)
print(li2)
print(li)
def f(x, li=[]):
	for i in range(x):
		li.append(i*i)
	return li
	
print(f(2))
print(f(3, [3, 2, 1]))
print(f(3))

[0, 1]
[3, 2, 1, 0, 1, 4]   # 重新设定一个列表
[0, 1, 0, 1, 4]      # 保留着f(2)的结果   li.append(x)不会改变地址

索引 切片

for循环遍历

  • 元素遍历

    li=['c','i','t','y','1','9','0','9']
    for i in li:
        print(i)
    
  • 索引遍历

    for i in range(len(li)):
        print(li[i])
    
  • 枚举遍历

    • enumerate() 对于一个可迭代的/可遍历的对象(如列表,字符串等),将其组成一个索引序列,利用它,我们可以同时获得索引和值
    li=['c','i','t','y','1','9','0','9']
    for i in enumerate(li,2):
        print(i,end=" ")
    for index,value in enumerate(li,2):
        print((index,value),end=' ')
    # (2, 'c') (3, 'i') (4, 't') (5, 'y') (6, '1') (7, '9') (8, '0') (9, '9')
    

li[x]=""

li[x:y]=['a','b'.....]

直接改

  • pop() 返回删除的元素

    • 如果不指定索引,默认删除最后一个元素
    • 删除索引指定元素
    li=['c','i','t','y','1','9','0','9']
    print(li.pop(2))
    print(li)
    
  • remove() 不会返回值

    • 移出第一次遇到的指定元素
    li=['c','i','t','y','1','9','0','9']
    li.remove('c')
    print(li)
    
  • del

    • 如有指定,删除指定元素
    • 无指定,删除整个列表且删除列表定义
    li=['c','i','t','y','1','9','0','9']
    del li[5]
    print(li)
    
  • clear() 清空列表所有元素

    li=['c','i','t','y','1','9','0','9']
    li.clear()
    print(li)
    

计数

count() 查找元素出现的次数

反转

reverse()

li=['c','i','t','y','1','9','0','9']
li.reverse()
print(li)

排序 sort()

按照ASCII码值排序

li=['c','i','t','y','1','9','0','9']
li.sort()
print(li)
li.sort(reverse=True)
print(li)

(5)赋值与深浅拷贝

赋值

  • 赋值是对对象的引用
la=[1,2,3,'s','d']
lb=la
print(id(la),id(b2))
#2142053322504 2142053322504

深浅拷贝

  • 深拷贝会创建新对象,内容是原对象的引用 (原元素集修改不会影响deepcopy的元素集)深拷贝拷贝对象的所有元素,包括多层嵌套的元素。因此,是开辟了一个新的内存储存区,和数据源没有关系

  • 浅拷贝相当于只拷贝了一层,修改外层元素会修改引用,让它们指向另一个位置;修改嵌套列表的元素,列表地址没有发生变化,指向的还是同一个位置

import copy
la=[1,2,3,['sss','d']]
lb_copy=copy.copy(la)
lb_deepcopy=copy.deepcopy(la)
la[3][1]="aaa"
print(la,lb_copy)
print(la,lb_deepcopy)
# [1, 2, 3, ['sss', 'aaa']] [1, 2, 3, ['sss', 'aaa']]
# [1, 2, 3, ['sss', 'aaa']] [1, 2, 3, ['sss', 'd']]

三种实现方法

  • 切片操作[:]
  • 工厂函数list(li)
  • copy模块内的copy函数 (原元素集添加新元素不会影响copy的元素集)
la=[1,2,3,'s','d']
lb=la
lb2=la[:]
print(id(la),id(lb2))
# 2142053322504 2142053438344

import copy
lb_copy=copy.copy(la)
print(id(la),id(lb_copy))
# 2397079326472 2397079495816

列表解析式

print([x for x in range(10) if x%2==0])

列表生成式

用来生成列表的特定的语法形式

sr='aaaa'
print([ord(x) for x in sr])

格式:

[表达式 for 迭代元素 in 可迭代对象]

实现原理:

  • 迭代[可迭代对象]中的每一个元素
  • 每迭代一次的结果赋值给对应的迭代元素,再通过表达式运算得到一个新的值
  • 最后所有通过表达式计算的值以一个列表的形式返回
y=13
x= (y+1 if y>10 else y-1)
print(x)
# 14

y=10
x= (y+1 if y>10 else y-1)
print(x)
# 9
# 中间为判断条件,前后位赋值语句

带过滤功能格式

[表达式 for 迭代元素 in 可迭代对象 if if条件语句]

li=[]
for 迭代元素 可迭代对象:
    if iif条件语句:
        li.append((迭代元素))
print(li)

demo:

name=["a","b","c"]
subject=['a','b','c','d']
li=[]
for i in name:
    for j in subject:
        li.append([i,j])
print(li)

print([[i,j] for i in name for j in subject])

# [['a', 'a'], ['a', 'b'], ['a', 'c'], ['a', 'd'], ['b', 'a'], ['b', 'b'], ['b', 'c'], ['b', 'd'], ['c', 'a'], ['c', 'b'], ['c', 'c'], ['c', 'd']]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值