1.list
1.1 list的元素访问,注意list中的元素类型不必全部相同
li = [1, 2, 3, '456', [1, 2, 3], {1 : 'one', 2 : 'two'}]
print(type(li))
print(li[0])
print(li[-1])#倒数第一个元素 li[len(li) - 1]
print(li[-2])
输出为
<class 'list'>
1
{1: 'one', 2: 'two'}
[1, 2, 3]
1.2 list中查询元素位置
li = [1, 2, 3, '456', [1, 2, 3], {1 : 'one', 2 : 'two'}]
print(li.index([1, 2, 3]))
print(li.index('456'))
输出为
4
3
1.3 在list中添加元素
l_a = [1, 2, 3]
l_a.append(4)
print(l_a)
l_b = [5, 6, 7]
l_a.extend(l_b)#使用append会将l_b作为list加入到l_a中
print(l_a)
输出为
[1, 2, 3, 4]
[1, 2, 3, 4, [5, 6, 7]]
1.4 遍历list中的元素
li = [1, 2, 3, '456', [1, 2, 3], {1: 'one', 2: 'two'}]
for i in li:
print(i)
print(',,,')
for i in range(len(li)):#i为list的下标
print(li[i])
输出为:
1
2
3
456
[1, 2, 3]
{1: 'one', 2: 'two'}
,,,
1
2
3
456
[1, 2, 3]
{1: 'one', 2: 'two'}
1.5 list中删除元素
li = [1, 2, 3, '456', [1, 2, 3], {1: 'one', 2: 'two'}]
del(li[0]) #删除后会生成一个新的list
print(li)
del(li[-1])
print(li)
输出为
[2, 3, '456', [1, 2, 3], {1: 'one', 2: 'two'}]
[2, 3, '456', [1, 2, 3]]
2.tuple
tuple可以理解为一个只读数组,改变tuple中的值会报错
t = (1, 2, 3, 4)
print(type(t))
t[0] = 1
输出为:
Traceback (most recent call last):
<class 'tuple'>
File "/Users/williwei/PycharmProjects/jichu_lesson1/test.py", line 3, in <module>
t[0] = 1
TypeError: 'tuple' object does not support item assignment
3.dict
3.1 访问dict中的元素
d = {'a' : 1, 'b' : 2, 1 : 'one', 2 : 'two', 3 : [1, 2, 3]}
print(type(d))
print(d['a'])
print(d[3])
输出为:
<class 'dict'>
1
[1, 2, 3]
3.2 判断dict中key是否存在
d = {'a' : 1, 'b' : 2, 1 : 'one', 2 : 'two', 3 : [1, 2, 3]}
print('a' in d)
print('c' in d)
输出为:
True
False
3.3 遍历dict中的元素
d = {'a' : 1, 'b' : 2, 1 : 'one', 2 : 'two', 3 : [1, 2, 3]}
for key in d:
print(d[key])
print('.....')
for key, value in d.items():
print(key, value)
d = d.keys()
print(type(d))
print(d)
输出为:
1
2
one
two
[1, 2, 3]
.....
a 1
b 2
1 one
2 two
3 [1, 2, 3]
<class 'dict_keys'>
dict_keys(['a', 'b', 1, 2, 3])
3.4 删除dict中的元素
d = {'a' : 1, 'b' : 2, 1 : 'one', 2 : 'two', 3 : [1, 2, 3]}
del(d['a'])
print(d)
输出为:
{'b': 2, 1: 'one', 2: 'two', 3: [1, 2, 3]}
4.set
4.1 set中不允许有相同元素存在,以一个list作为参数
s_a = set([1, 2, 3, 4, 5, 5, 6])
print(s_a)
print(1 in s_a)
输出为:
{1, 2, 3, 4, 5, 6}
True
4.2 set的集合操作
s_a = set([1, 2, 2, 3, 4, 5, 6])
s_b = set([4, 5, 6, 7, 8, 9])
#并集
print(s_a | s_b)
print(s_a.union(s_b))
#交集
print(s_a & s_b)
print(s_a.intersection(s_b))
#差集 A - (A&B)
print(s_a - s_b)
print(s_a.difference(s_b))
#对称差 (A |B)- (A & B)
print(s_a ^ s_b)
print(s_a.symmetric_difference(s_b))
输出为:
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{4, 5, 6}
{4, 5, 6}
{1, 2, 3}
{1, 2, 3}
{1, 2, 3, 7, 8, 9}
{1, 2, 3, 7, 8, 9}
4.3 set中添加和删除元素
s_a = set([1, 2, 2, 3, 4, 5, 6])
s_b = set([4, 5, 6, 7, 8, 9])
s_a.add('a')
print(s_a)
s_a.update([4, 5, 6, 70])
print(s_a)
s_a.remove(70)
print(s_a)
输出为:
{1, 2, 3, 4, 5, 6, 'a'}
{1, 2, 3, 4, 5, 6, 'a', 70}
{1, 2, 3, 4, 5, 6, 'a'}
4.4 遍历set中的元素
s_a = set([1, 2, 2, 3, 4, 5, 6])
for i in s_a:
print(i)
输出为:
1
2
3
4
5
6
5.容器的应用
5.1 切片slice
#切片slice
li = list(range(10))
print(li)
#切片[start:end:steps] >= start <end,默认为1
print(li[2:5])
print(li[:4])
print(li[5:])
print(li[0:10:3])#越界不会报错
#负值怎么处理?
print(li[5:-2]) #[6,7]
print(li[9:0:-1])
print(li[9::-1])
print(li[::-2])
#切片生成一个新的对象
print(li)#还是保持原样
re_li = li[::-1]
print(re_li)
输出为:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4]
[0, 1, 2, 3]
[5, 6, 7, 8, 9]
[0, 3, 6, 9]
[5, 6, 7]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[9, 7, 5, 3, 1]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
5.2 列表推导
列表推导式推导公式
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
#一维列表
li = [i * i for i in range(10)]
print(li)
li_1 = [x**2 for x in range(10)]
print(li_1)
#二维列表
li_2d = [[0] * 3] * 3
print(li_2d)
li_2d[0][0] = 100
print(li_2d)
li_2d = [[0] * 3 for i in range(0,3,1)]
li_2d[0][0] = 100
print(li_2d)
li_2d = [[i,j] for i in range(3) for j in range(3)]
li_2d[0][0] = 100
print(li_2d)
di = {x : x % 2 == 0 for x in range(10)} #判断0-10内的数是否为偶数
print(di)
输出为:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[100, 0, 0], [100, 0, 0], [100, 0, 0]]
[[100, 0, 0], [0, 0, 0], [0, 0, 0]]
[[100, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
{0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}
5.3 generator生成器
生成器中一般包含yield关键字,yield中会保存当前函数的运行状态,函数不终止
def fib(limit):
n, a, b = 0, 0, 1
while n < limit:
yield b
a, b = b, a + b
n += 1
return 'done'
import traceback
f = fib(5)
print(next(f))
print(next(f))
print(next(f))
print(next(f))
print(next(f))
try:
print(next(f))
except StopIteration:
traceback.print_exc()
输出为:
Traceback (most recent call last):
1
1
2
File "/Users/williwei/PycharmProjects/jichu_lesson1/test.py", line 16, in <module>
3
print(next(f))
5
StopIteration: done
5.4 iterator迭代器
可用isinstance()判断是否是一个可迭代对象
#迭代器
from collections import Iterable
from collections import Iterator
print(isinstance([1, 2, 3], Iterable))
print(isinstance({}, Iterable))
print(isinstance(123, Iterable))
print(isinstance('abc',Iterable))
print(isinstance([1, 2, 3], Iterator))
输出为:
True
True
False
True
False