文章目录
列表数组创建(1)拼接(2)重复(3)索引 [ ] ,切片 [ : ], [ : : ](4)增删改查(5)元素遍历其他
练习赋值与深浅拷贝列表解析式
元组元组的创建空内元组的创建单元素元组的创建多元素元组的创建
使用
列表
列表使用方括号括起来的[ ], 每个元素以逗号分割;可以储存不同的数据类型
数组
特点:
是一个有序的可以重复的可变类型
创建
创建空列表
list1
= []
print(list1
)
创建多元素列表
list1
= [1, 2, 3, 'abc', 'def', 'ghi', ['y','o', 'u']]
print(list1
,type(list1
))
sr
= 'abc'
list2
= list(sr
)
print(list2
,type(list2
))
[1, 2, 3, 'abc', 'def', 'ghi', ['y', 'o', 'u']] <class 'list'>
['a', 'b', 'c'] <class 'list'>
(1)拼接
li1
= ['i']
li2
= ['want']
print(li1
+ li2
)
['i', 'want']
(2)重复
li1
= ['i']
li2
= ['want']
print(li1
* 3)
['i', 'i', 'i']
(3)索引 [ ] ,切片 [ : ], [ : : ]
li
= ['c', 'i', 't', 'y', 'city', 'college', 'zhejiang']
print(len(li
))
print(li
[0], li
[-7])
print(li
[:5])
print(li
[::-1])
print(li
[6][1])
7
c c
['c', 'i', 't', 'y', 'city']
['zhejiang', 'college', 'city', 'y', 't', 'i', 'c']
h
(4)增删改查
增
append
()
extend
()
insert
()
li
= ['City', 'College']
print(id(li
))
li1
= ['a', 'b', 'c']
li
.append
(li1
)
print((li
, id(li
)))
li
= ['a', 'c']
print(id(li
))
2875353102664
(['City', 'College', ['a', 'b', 'c']], 2875353102664)
2875353133768
sr
= '城市学院'
li
= []
for i
in sr
:
li
.append
(ord(i
))
print(li
)
[22478, 24066, 23398, 38498]
li
= ['n', 'b']
li1
= ['a', 'b', 'c']
li
.extend
(li1
)
print(li
)
li
.insert
(1, li1
)
print(li
)
li
[5] = '5'
print(li
)
li
[2:5] = ['1', '2', '3', '4']
print(li
)
['n', 'b', 'a', 'b', 'c']
['n', ['a', 'b', 'c'], 'b', 'a', 'b', 'c']
['n', ['a', 'b', 'c'], 'b', 'a', 'b', '5']
['n', ['a', 'b', 'c'], '1', '2', '3', '4', '5']
删
pop
()
remove
()
del
clear
()
pop()
li
= ['a', 'b', 'c', 'd', 'e']
print(li
.pop
())
print(li
)
e
['a', 'b', 'c', 'd']
remove()
li
= ['a', 'b', 'c', 'd', 'e', 'city', 'e']
li
.remove
('e')
print(li
)
['a', 'b', 'c', 'd', 'city', 'e']
del
li
= ['a', 'b', 'c', 'd', 'e', 'city', 'e']
del li
[5]
print(li
)
clear()
li
= ['a', 'b', 'c', 'd', 'e', 'city', 'e']
del li
[5]
print(li
)
li
.clear
()
print(li
)
(5)元素遍历
元素遍历
li
= ['a', 'b', 'c']
for i
in li
:
print(i
)
索引遍历
li
= ['a', 'b', 'c']
for i
in range(len(li
)):
print(i
)
枚举遍历
# enumerate() ,对于一个课迭代的/可遍历的对象(如列表,字符串)
# enumerate() ,将其组成一个索引序列,利用它,我们可以同时获得索引和值
li
= ['a', 'b', 'c']
for i
in enumerate(li
, 2):
print(i
)
(2, 'a')
(3, 'b')
(4, 'c')
li
= ['a', 'b', 'c']
for index
, value
in enumerate(li
[:2], 2):
print(index
, value
)
2 a
3 b
其他
计数,count(), 查找元素出现的次数反转,reverse()
li
= list('abcd')
print(li
)
li
.reverse
()
print(li
)
['a', 'b', 'c', 'd']
['d', 'c', 'b', 'a']
排序
li
= list('abcd')
li
.sort
()
print(li
)
['a', 'b', 'c', 'd']
li
= list('abcd')
li
.sort
(reverse
=True)
print(li
)
['d', 'c', 'b', 'a']
输出两个表的交集
li1
= ['a', 'b', 'c', 'd']
li2
= ['c', 'd', 'e', 'f']
li3
= []
for i
in li1
:
if i
in li2
:
li3
.append
(i
)
print(li3
)
练习
1.input() 函数实现往空列表中添加元素,当输入
'q'时,结束输入,并返回列表。
li1
= []
sr
= input("请输入:")
while sr
!= 'q':
li1
.append
(sr
)
sr
= input("请输入:")
print(li1
)
li
= []
while True:
inp
= input(":")
if inp
== 'q':
break
else:
li
.append
(inp
)
print(li
)
2.随机生成
30个
0~10的随机,并统计每个数出现的次数,返回结果形式为
[[0, 3], [1, 4],...., [10, 5]]
import random
rand
= []
rout
= []
li1
= []
li2
= []
for i
in range(30):
rand
.append
(random
.randint
(0,10))
for i
in range(0,11):
if i
<= 5:
li1
.append
([i
, rand
.count
(i
)])
else:
li2
.append
([i
, rand
.count
(i
)])
rout
.append
([li1
,li2
])
print(rout
)
[[[[0, 3], [1, 2], [2, 3], [3, 2], [4, 4], [5, 3]], [[6, 2], [7, 3], [8, 5], [9, 1], [10, 2]]]]
赋值与深浅拷贝
赋值是对对象的引用
la
= [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb
= la
print(la
)
print(lb
)
print(la
is lb
)
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
True
la
= [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb
= la
la
[5] = 'aaa'
print(la
)
print(lb
)
[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
[1, 2, 3, 4, 5, 'aaa', ['b1', 'b2']]
深浅拷贝
三种实现方法:
切片 [ ]
工厂函数list
copy模块内的copy函数
la
= [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb
= la
lb2
= la
[:]
print(id(la
), id(lb2
))
import copy
lb_copy
= copy
.copy
(la
)
print(id(la
), id(lb_copy
))
la
= [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb
= la
lb2
= la
[:]
print(id(la
), id(lb2
))
import copy
lb_copy
= copy
.copy
(la
)
print(id(la
), id(lb_copy
))
la
.append
('test')
print(la
)
print(lb_copy
)
2005952492104 2005952492296
2005952492104 2005953952328
[1, 2, 3, 4, 5, 'a', ['b1', 'b2'], 'test']
[1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
la
= [1, 2, 3, 4, 5, 'a', ['b1', 'b2']]
lb_deepcopy
= copy
.deepcopy
(la
)
print(la
, id(la
))
print(lb_deepcopy
, id(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]
使用的格式
[表达式
for 迭代元素
in 可迭代对象
]
[exp
for iter_val
in iter]
实现原理
迭代
iter中的每一个元素 每迭代一次的结果赋值给iter_val元素,通过exp运算得到一个新的值 最后所有通过表达式计算的值以一个列表形式返回。
三目运算符
y
= 10
x
= y
+ 1 if y
> 0 else y
- 1
print(x
)
11
[exp
for iter_val
in iter if if_condtion
]
li
= []
for iter_val
in iter:
if if_condtion
:
li
.append
(iter_val
)
print(li
)
name
= ['tom', 'jack', 'lucy']
subject
= ['python', 'java', 'c', 'c++']
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
])
[['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c'], ['jack', 'c++'], ['lucy', 'python'], ['lucy', 'java'], ['lucy', 'c'], ['lucy', 'c++']]
[['tom', 'python'], ['tom', 'java'], ['tom', 'c'], ['tom', 'c++'], ['jack', 'python'], ['jack', 'java'], ['jack', 'c'], ['jack', 'c++'], ['lucy', 'python'], ['lucy', 'java'], ['lucy', 'c'], ['lucy', 'c++']]
元组
有序可以重复不可更改
用括号包裹
元组的创建
空内元组的创建
tp
= ()
print(type(tp
))
<class 'tuple'>
单元素元组的创建
tp
= ('abc', )
print(tp
,type(tp
))
('abc',) <class 'tuple'>
多元素元组的创建
包含多种数据类型
使用
拼接
tp1
= ('1', '2', '3')
tp2
= ('4', '5', '6')
print(tp1
+tp2
)
('1', '2', '3', '4', '5', '6')
重复
tp1
= ('1', '2', '3')
tp2
= ('4', '5', '6')
print(tp1
* 2)
('1', '2', '3', '1', '2', '3')
索引(偏移) 切片
tp2
= ('4', '5', '6')
print(tp2
[:3])
('4', '5', '6')
tp
= (1, 2, 3, 'a', 'b', ['aa', 'bb', 'cc'])
tp
[5][2] = 'dd'
print(tp
)
(1, 2, 3, 'a', 'b', ['aa', 'bb', 'dd'])
查
索引查
切片查
index
tp
= (1, 2, 3, 'a', 'b', ['aa', 'bb', 'cc'])
print(tp
.index
('a'))
3
增
不能
删
不能删除某个元素,可以全部删除
判断
tp
= ('a', 'b', 'c')
print('a' in tp
)
True
tp
= ('a', 'b', 'c')
print(max(tp
), min(tp
))
c a
遍历
元素遍历
tp
= ('a', 'b', 'c')
for i
in tp
:
print(i
)
a
b
c
索引遍历
tp
= ('a', 'b', 'c')
for i
in range(len(tp
)):
print(i
)
0
1
2
枚举遍历
tp
= ('a', 'b', 'c')
for i
in enumerate(tp
, 1):
print(i
)
(1, 'a')
(2, 'b')
(3, 'c')
tp
= ('a', 'b', 'c')
for i
,j
in enumerate(tp
[:], 1):
print(i
,j
)
1 a
2 b
3 c
嵌套
tp
= ((1, 2, 3), (4, 5, 6), (7, 8, 9))
tp1
= (((1,2,3),(8,9),10),(4,5,6),7)
print(tp
[1][1])
print(tp1
[0][1][1])
a = 2
b = 2
print(id(a), id(b), id(2))