Python第三天笔记——列表

列表

#使用方括号[ ]括起来的,每个元素之间用逗号隔开;

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

#数组

  • 特点

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

1、创建空列表

li=[]
print(li,type(li))

#输出结果:
[] <class 'list'>

2、创建多元素列表

gi=[1,2,3,'abc','def','ghi',["I","love","python"]]
print(gi,type(gi))

#输出结果:
[1, 2, 3, 'abc', 'def', 'ghi', ['I', 'love', 'python']] <class 'list'>

3、强转

sr="abc"
hi=list(sr)
print(hi,type(hi))

#输出结果:
['a', 'b', 'c'] <class 'list'>

列表的运算

(1)拼接

li1=["I"]
li2=["love","python"]
print(li1+li2)

#输出结果:
['I', 'love', 'python']

(2)重复

print(li2*3)

#输出结果:
['love', 'python', 'love', 'python', 'love', 'python']

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

gi=['cl','WZX','abc','def','ghi','I','love','python']
print(len(gi))
print((gi[0],gi[-2]))
print(gi[:5])
print(gi[0:6:2])
print(gi[-1:-8:-2])
print(gi[::-1])
print(gi[6][1])

#输出结果:
8
('cl', 'love')
['cl', 'WZX', 'abc', 'def', 'ghi']
['cl', 'abc', 'ghi']
['python', 'I', 'def', 'WZX']
['python', 'love', 'I', 'ghi', 'def', 'abc', 'WZX', 'cl']
o

列表的常见操作

(1)增

  • append()
li = ["a", "b"]
li.append("hh")
print(li)

#输出结果:
['a', 'b', 'hh']

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

#输出结果:
[22478, 24066, 23398, 38498]
  • extend()
li=["I","know"]
li1=["a","b","c"]
li.extend(li1)
print(li)

#输出结果:
['I', 'know', 'a', 'b', 'c']
  • insert():按照索引添加
li=["I","know"]
li1=["a","b","c"]
li.insert(1,li1)
print(li)

#输出结果:
['I', ['a', 'b', 'c'], 'know']

(2)删

  • pop():返回被删除的元素

    • 如果不指定索引,默认删除最后一个元素
    • 删除指定索引对应的元素
    li=["a","b","c","d","e"]
    print(li.pop())
    print(li.pop(2))
    print(li)
    
    #输出结果:
    e
    c
    ['a', 'b', 'd']
    
  • remove():移除第一次遇到的指定元素

li=["a","b","c","d","e"]
li.remove(li[2])
print(li)
li.remove('e')
print(li)

#输出结果:
['a', 'b', 'd', 'e']
['a', 'b', 'd']
  • del
li=["a","b","c","d","e"]
del li[3]
print(li)

#输出结果:
['a', 'b', 'c', 'e']
  • clear()
li.clear()
print(li)

#输出结果:
[]

(3)改

li1=["a","b","c"]
li=['I', ['a', 'b', 'c'], 'know']
li1[2]="666"
print(li1)
li[2:]=['x','y','z']
print(li)

#输出结果:
['a', 'b', '666']
['I', ['a', 'b', '666'], 'x', 'y', 'z']

(4)查:与以上的索引,切片相同

列表的遍历

(1)元素遍历

li=["a","b","c","d","e"]
for i in li:
    print(i,end=" ")
    
#输出结果:
a b c d e

(2)索引遍历

li=["a","b","c"]
for i in range(len(li)):
    print(li[i])
  
#输出结果:
a
b
c

(3)枚举遍历

  • enumerate():对于一个可迭代/可遍历的对象(如列表,字符串等),将其组成一个索引序列,利用它可以同时获得索引和值。
li=["a","b","c"]
for i in enumerate(li,0):
    print(i)
   
#输出结果:
(0, 'a')
(1, 'b')
(2, 'c')

for index,value in enumerate(li,0):
    print(index,value)
    
#输出结果:
0 a
1 b
2 c

其他操作

  • 计数:count(),查找元素出现的次数
  • 反转:reverse()
li=list("abcd")
print(li)
li.reverse()
print(li)

#输出结果:
['a', 'b', 'c', 'd']
['d', 'c', 'b', 'a']
  • 排序:sort(),按照ASCII码排序
li=["l","c","h","i"]
print(li)
li.sort() #升序
print(li)
li.sort(reverse=True) #降序
print(li)

#输出结果:
['l', 'c', 'h', 'i']
['c', 'h', 'i', 'l']
['l', 'i', 'h', 'c']

#例题

**输出两个列表的交集**:
li=[]
li1=["a","b","c","d"]
li2=["c","d","e","f"]
for i in li1:
    if i in li2:
        li.append(i)
print(li)

#输出结果:
['c', 'd']

**输出两个列表的并集**:
li1=["a","b","c","d"]
li2=["c","d","e","f"]
for i in li2:
    if i not in li1:
        li1.append(i)
print(li1)

#输出结果:
['a', 'b', 'c', 'd', 'e', 'f']
#1.input()函数实现往空列表中添加元素,当输入"q"的时候,结束输入,并返回列表。
list1=[]
while True:
    a = input("请添加元素:")
    if a !="q":
        list1.append(a)
    else:
        break
print(list1)

#输出结果:
请添加元素:w
请添加元素:e
请添加元素:r
请添加元素:q
['w', 'e', 'r']
#2.随机生成30个0-10的随机整数,并统计每个数出现的次数,返回的结果形式为[[0, 3], [1, 4], ... , [10, 5]]
li=[]
rand=[]
import random
for i in range(30):
  rand.append((random.randint(0,10)))
print(rand,end=" ")
print( )

for i in range(0,11):
    li.append([i,rand.count(i)])
print(li)

#输出结果:
[9, 5, 3, 7, 5, 6, 2, 5, 4, 7, 7, 0, 3, 6, 3, 9, 0, 3, 4, 5, 1, 3, 6, 1, 1, 0, 6, 0, 10, 3] 

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

赋值和深浅拷贝

赋值

赋值是对对象的引用

la=[1,2,3,4,5,'a',['b1','b2']]
lb=la
print(la)
print(lb)
print(id(la),id(lb))

#输出结果:
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
2336330341128 2336330341128

la[5]='aaa'
print(la)
print(lb)
print(id(la),id(lb))

#输出结果:
[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
2336330341128 2336330341128

深浅拷贝

  • 浅拷贝会创建新对象,内容是原对象的引用

  • 三种实现方法

    • 切片操作[:]
    la=[1,2,3,4,5,'a',['b1','b2']]
    lb2=la[:]
    print(la)
    print(lb2)
    print(id(la),id(lb2))
    
    #输出结果:
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
    2178759777032 2178759853064
    
    • 工厂函数list(li)
    • copy模块的copy函数
    import copy
    lb3=copy.copy(la)
    print(la)
    print(lb3)
    print(id(la),id(lb3))
    
    #输出结果:
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
    2214658824968 2214660383880
    

    #添加原子类型,不会影响lb3的拷贝

    la.append('hh')
    print(la)
    print(lb3)
    
    #输出结果:
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'hh']
    [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
    
    la[6][1]='hh'
    print(la)
    print(lb3)
    
    #输出结果:
    [1, 2, 3, 4, 5, 'a', ['b1', 'hh']]
    [1, 2, 3, 4, 5, 'a', ['b1', 'hh']]
    
  • 深拷贝

import copy
la=[1,2,3,4,5,'a',['b1','b2']]
lb=copy.deepcopy(la)
print(la,id(la))
print(lb,id(lb))

#输出结果:
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 1822894830600
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 1822894831688

la[6][1]="hh"
print(la,id(la))
print(lb,id(lb))

#输出结果:
[1, 2, 3, 4, 5, 'a', ['b1', 'hh']] 2081509061640
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']] 2081509062728

浅拷贝仅拷贝一层

深拷贝拷贝对象的所有元素,包括多层嵌套的元素

因此是开辟了一个新的内存储存区,和数据源没有关系了

列表解析式

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

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

#输出结果:
[0, 2, 4, 6, 8]

sr="城市学院"
print([ord(x) for x in sr])

#输出结果:
[22478, 24066, 23398, 38498]

格式:

[exp for iter_val in iter]

实现原理:

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

#输出结果:
13

带过滤功能的格式

[exp for iter_val in iter if if_condition]

li=[]
for iter_val in iter:
    if if_condition:
        li.append(iter_val)
print(li)

demo:

name=["Tom","Jack","Lucy"]
sub=["Python","Java","C","C++"]
li=[]
for i in name:
    for j in sub:
        li.append([i,j])
print(li)

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

#输出结果(相同):
[['Tom', 'Python'], ['Tom', 'Java'], ['Tom', 'C'], ['Tom', 'C++'], ['Jack', 'Python'], ['Jack', 'Java'], ['Jack', 'C'], ['Jack', 'C++'], ['Lucy', 'Python'], ['Lucy', 'Java'], ['Lucy', 'C'], ['Lucy', 'C++']]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值