文章目录
列表定义:特点:创建:列表常用操作:(1)拼接:(2)重复(3)索引(偏移)[],切片[:],[::](4)列表的常见操作(增删改查)1.增2.删3.改4.查5.其他操作列表取交集
用列表堆栈实现赋值与深浅拷贝赋值深浅拷贝
列表解析式列表生成式格式:实现原理:
三目运算符练习
列表
定义:
列表使用方括号括起来[],每个元素以逗号分割;
可以储存不同的数据类型
特点:
是一个有序的可以重复的可变类型
创建:
创建空列表
li
= []
print(type(li
))
<class 'list'>
创建多元素列表
li
= [1, 2, 3, "abcd", "City", "College", ["I", "Love", "Python"]]
print(li
,type(li
))
[1, 2, 3, 'abcd', 'City', 'College', ['I', 'Love', 'Python']] <class 'list'>
强转
sr
= "abcd"
list1
= list(sr
)
print((list1
, type(list1
)))
(['a', 'b', 'c', 'd'], <class 'list'>)
列表常用操作:
(1)拼接:
li1
= ["I"]
li2
= ["Love"]
li3
= ["Python"]
print(li1
+ li2
+ li3
)
['I', 'Love', 'Python']
(2)重复
li1
= ["I"]
print(li1
* 3)
['I', 'I', 'I']
(3)索引(偏移)[],切片[:],[::]
li1
= [1, 2, 3, '4']
print(li1
[0], li1
[3])
1 4
print(len(li1
))
print(li1
[0], li1
[-4])
print(li1
[:3])
print(li1
[::-1])
4
1 1
[1, 2, 3]
['4', 3, 2, 1]
li
= [1, 2, 3, '4', [1, 2, 3, '4ds']]
print(li
[4][3][1])
d
(4)列表的常见操作(增删改查)
1.增
.append
()
li
= ["City", "liyue"]
li1
= ["a", "b", "c", "d"]
print(id(li
))
li
.append
(li1
)
print((li
, id(li
)))
li
= ["a", "b"]
print(id(li
))
3206680913864
(['City', 'liyue', ['a', 'b', 'c', 'd']], 3206680913864)
3206681332360
sr
= "城市学院"
li
= []
for i
in sr
:
li
.append
(ord(i
))
print(li
)
[22478, 24066, 23398, 38498]
.extend
()
li
= ["City", "liyue"]
li1
= ["a", "b", "c", "d"]
li
.extend
(li1
)
print(li
)
['City', 'liyue', 'a', 'b', 'c', 'd']
.insert
()
li
= ["City", "liyue"]
li1
= ["a", "b", "c", "d"]
li
.insert
(1, li1
)
print(li
)
['City', ['a', 'b', 'c', 'd'], 'liyue']
sr
= "abc"
sr
[3] = "D"
Traceback
(most recent call last
):
File
"D:/python/test1/day03.py", line
59, in <module
>
sr
[3] = "D"
TypeError
: 'str' object does
not support item assignment
li
= ["City", "liyue"]
li
[6] = 666
print(li
)
Traceback
(most recent call last
):
File
"D:/python/test1/day03.py", line
62, in <module
>
li
[6] = 666
IndexError
: list assignment index out of
range
li1
= ["a", "b", "c", "d"]
li1
[1:3] = ["x", "y", "z"]
print(li1
)
['a', 'x', 'y', 'z', 'd']
li1
= ["a", "b", "c", "d"]
li1
[1:4] = ["x", "y", "z"]
print(li1
)
['a', 'x', 'y', 'z']
2.删
.pop
()
li
= ["a", "b", "c", "d", "e"]
print(li
.pop
())
print(li
)
print(li
.pop
(2))
print(li
)
e
['a', 'b', 'c', 'd']
c
['a', 'b', 'd']
.remove
()
li
= ["a", "b", "c", "d", "e", "e"]
print(li
.remove
("e"))
print(li
)
None
['a', 'b', 'c', 'd', 'e']
del
li
= ["a", "b", "c", "d", "e"]
del li
[3]
print(li
)
del li
print(li
)
['a', 'b', 'c', 'e']
Traceback
(most recent call last
):
File
"D:/python/test1/day03.py", line
79, in <module
>
print(li
)
NameError
: name
'li' is not defined
.clear
()
li
= ["a", "b", "c", "d", "e"]
print(li
.clear
())
print(li
)
None
[]
3.改
利用索引直接修改
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", "d", "e"]
for i
in range(len(li
)):
print(li
[i
],end
='')
abcde
(3)枚举遍历
enumerate()
li
= ["a", "b", "c", "d", "e"]
for i
in enumerate(li
):
print(i
, end
=' ')
print()
for i
in enumerate(li
, 2):
print(i
, end
=' ')
print()
for index
, value
in enumerate(li
):
print(index
, value
, end
=' ')
(0, 'a') (1, 'b') (2, 'c') (3, 'd') (4, 'e')
(2, 'a') (3, 'b') (4, 'c') (5, 'd') (6, 'e')
0 a
1 b
2 c
3 d
4 e
5.其他操作
.count
()
.reverse
()
.sort
(key
=None, reverse
=False)
li
= ["a", "b", "c", "d", "e"]
li
.reverse
()
print(li
)
li
.sort
()
print(li
)
li
.sort
(reverse
=True)
print(li
)
['e', 'd', 'c', 'b', 'a']
['a', 'b', 'c', 'd', 'e']
['e', 'd', 'c', 'b', 'a']
列表取交集
li
= ["a", "b", "c", "d"]
li2
= ["c", "d", "e", "f"]
for i
in li
:
if i
in li2
:
print(i
)
li3
= [i
for i
in li
if i
in li2
]
print(li3
)
c
d
['c', 'd']
用列表堆栈实现
class stacklist:
def __init__(self
):
self
.list1
= []
self
.flag
= -1
def stack_in(self
, str):
self
.list1
.append
(str)
self
.flag
+= 1
def stack_out(self
):
if self
.flag
== -1:
print("空栈")
return
self
.flag
-= 1
return print(self
.list1
.pop
())
def runout(self
):
print(self
.list1
[::-1])
a
= stacklist
()
a
.stack_out
()
a
.stack_in
(9)
a
.stack_in
("55")
a
.stack_out
()
a
.stack_in
(5)
a
.runout
()
空栈
55
[5, 9]
赋值与深浅拷贝
赋值
赋值是对对象的引用
la
= [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb
= la
la
.pop
()
print((la
,lb
))
([1, 2, 3, 4, 5, 'a'], [1, 2, 3, 4, 5, 'a'])
深浅拷贝
浅拷贝会创建新对象,内容是原对象的引用
三种实现方法:
切片操作[:]工厂函数 list(li)copy模块内的copy函数
import copy
la
= [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb
= la
lb2
= la
[:]
lb_copy
= copy
.copy
(la
)
print(id(la
), id(lb_copy
))
print(id(la
), id(lb2
))
la
.append
('test')
la
[6][0] = 'bbb'
print(la
)
print(lb
)
print(lb2
)
print(lb_copy
)
2084394830408 2084394829448
2084394830408 2084394830472
[1, 2, 3, 4, 5, 'a', ['bbb', 'b2'], 'test']
[1, 2, 3, 4, 5, 'a', ['bbb', 'b2'], 'test']
[1, 2, 3, 4, 5, 'a', ['bbb', 'b2']]
[1, 2, 3, 4, 5, 'a', ['bbb', 'b2']]
深拷贝
import copy
la
= [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb_deepcopy
= copy
.deepcopy
(la
)
print(id(la
), id(lb_deepcopy
))
la
[5] = 'aaa'
print(la
)
print(lb_deepcopy
)
la
[6][1] = 'aaa'
print(la
)
print(lb_deepcopy
)
浅拷贝相当于只拷贝了一层,修改外层元素,就会修改引用,让他们指向另一个位置。而修改嵌套列表中的元素,列表地址没有发生变化,指向的还是同一个位置
深拷贝拷贝对象的所有元素,包括多层嵌套的元素。因此,是开辟了一个新的内存储区,和数据源没有关系了。
列表解析式
li
= []
for x
in range(10):
li
.append
(x
)
print(li
)
print([x
for x
in range(10)])
print([x
for x
in range(10) if x
% 2 == 0])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]
列表生成式
用来生成列表的特定的语法形式
sr
= "城市学院"
print([ord(x
) for x
in sr
])
[22478, 24066, 23398, 38498]
格式:
[exp
for iter_val
in iter]
[exp
for iter_val
in iter if if_condtion
]
name
= ["Tom", "Jack", "Luck"]
subject
= ["Python", "Java", "C", "C++"]
print([[x
, y
] for x
in name
for y
in subject
])
[['Tom', 'Python'], ['Tom', 'Java'], ['Tom', 'C'], ['Tom', 'C++'], ['Jack', 'Python'], ['Jack', 'Java'], ['Jack', 'C'], ['Jack', 'C++'], ['Luck', 'Python'], ['Luck', 'Java'], ['Luck', 'C'], ['Luck', 'C++']]
实现原理:
迭代[可迭代对象]中的每一个元素每迭代一次的结果赋值给对应的迭代元素,再通过表达式运算得到一个新的值最后所有通过表达式计算的值以一个列表的形式返回。
三目运算符
y
= 12
x
= y
+ 1 if y
> 10 else y
- 1
print(x
)
13
练习
li
= []
while True:
sr
= input("请输入元素,输入q结束")
if sr
== 'q':
print(li
)
break
li
.append
(sr
)
import random
li
= []
li2
= []
for i
in range(30):
li
.append
(random
.randint
(0, 10))
for i
in range(11):
li2
.append
([i
, li
.count
(i
)])
print(li2
)
[[0, 2], [1, 6], [2, 5], [3, 1], [4, 3], [5, 3], [6, 1], [7, 3], [8, 1], [9, 2], [10, 3]]