python—数据结构

列表

以下是 Python 中列表的方法:
在这里插入图片描述

list=[1,2,3]
list2=[10,20,30]
list.append(4) #添加到末尾
print(list) #[1,2,3,4]

list.extend(list2) #用list2扩充list
print(list)  #[1,2,3,4,10,20,30]

list.insert(0,'hhh') #插入
print(list) #['hhh',1,2,3,4,10,20,30]

list.remove(4) #删除
print(list) #['hhh',1,2,3,10,20,30]

list.pop(0) #删除
print(list) #[1,2,3,10,20,30]

print(list.index(10)) #3  索引

print(list.count(20)) #1  出现次数

list3=[5,3,6,2,8]
list3.sort() #正排
print(list3) #[2,3,5,6,8]

list3.reverse() #倒排
print(list3) #[8,6,5,3,2]

print(list3.copy()) #[8,6,5,3,2]  浅复制

list3.clear()  #清空


将列表当做堆栈使用

列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引pop() 方法可以把一个元素从堆栈顶释放出来。

stack=[1,2,3]

stack.append(10)
stack.append(20)
print(stack)  #[1,2,3,10,20]

print(stack.pop())#20
print(stack) #[1,2,3,10]

print(stack.pop()) #10
print(stack) #[1,2,3]

将列表当作队列使用

也可以把列表当做队列用,只是在队列里第一加入的元素,第一个取出来(先进先出)

from collections import deque
queue=deque([1,2,3])
print(queue)  #deque([1, 2, 3])
queue.append(10) #添加到尾部
print(queue) #deque([1, 2, 3,10])
queue.popleft()  #删除头部
print(queue)  #deque([ 2, 3,10])

列表推导式

每个列表推导式都在 for 之后跟一个表达式,然后有零到多个for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表

这里我们将列表中每个数值乘三,获得一个新的列表:

list=[2,4,6]
print([3*x for x in list]) #[6,12,18]

这里我们将列表每个数值取平方:

list=[2,4,6]
print([[x,x**2] for x in list]) #[[2, 4], [4, 16], [6, 36]]

可以用 if 子句作为过滤器:

list=[2,4,6]
print([3*x for x in list if x>3]) #[12, 18]
print([2**x for x in list if x<6]) #[4, 16]

以下是一些关于循环和其它技巧的演示:

list1=[1,2,3]
list2=[10,20,30]
print([x*y for x in list1 for y in list2]) #[10, 20, 30, 20, 40, 60, 30, 60, 90]
print([x+y for x in list1 for y in list2]) #[11, 21, 31, 12, 22, 32, 13, 23, 33]
print([list1[i]*list2[i] for i in range(len(list1))]) #[10, 40, 90]

列表推导式可以使用复杂表达式或嵌套函数:

print([round(355/113,i)for i in range(1,6)])
#[3.1, 3.14, 3.142, 3.1416, 3.14159]
#range(x,n)  x为表达式,n为小数点位数

嵌套列表解析

将3X4的矩阵列表转换为4X3列表:

matrix = [
     [1, 2, 3, 4],
     [5, 6, 7, 8],
     [9, 10, 11, 12],
                 ]
print([[row[i] for row in matrix] for i in range(4)])
#[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

这样写也可以:

matrix = [
     [1, 2, 3, 4],
     [5, 6, 7, 8],
     [9, 10, 11, 12],
                 ]
hhh=[]
for i in range(4):
    hhh.append([row[i] for row in matrix])
print(hhh) #[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

del语句

以用 del 语句从列表中删除一个切割,或清空整个列表

list=[1,2,3,10,20,30]
del list[0]
print(list) #[2, 3, 10, 20, 30]

del list[2:4] #删除第3~4个
print(list) #[2, 3, 30]

del list[:] #删除全部
print(list) #[]

del list #删除变量

元组和序列
tuple1=(1,2,3,'hhh')#tuple=1,2,3,'hhh'
# 无论输入时是否有括号,输出都会有括号,通常要带上括号
print(tuple1) #(1, 2, 3, 'hhh')
tuple2=(tuple1,(6,6,6))
print(tuple2) #((1, 2, 3, 'hhh'), (6, 6, 6))

集合

集合是一个无序不重复元素的集。基本功能包括关系测试消除重复元素

可以用大括号({})创建集合。注意:如果要创建一个空集合,你必须用 set()而不是 {} ;后者是创建一个空的字典

a={'lala','hhh','zzz',10,20,30,'hhh'}
print(a) #{'lala', 'zzz', 10, 20, 30, 'hhh'}删除重复放入元素
print('hhh' in a) #输出True

c=set('abcdfha')
d=set('acvgyuf')
print(c) #{'h', 'd', 'f', 'b', 'a', 'c'}
print(c-d)#{'d', 'b', 'h'} 在c中而不再d中的元素
print(c|d) #{'c', 'y', 'b', 'f', 'v', 'a', 'u', 'h', 'g', 'd'} 在c或d的元素
print(c&d) #{'f', 'a', 'c'} c和d都有的元素
print(c^d)#{'u', 'v', 'b', 'y', 'h', 'd', 'g'} 在c和d中的元素,但不同时在c和d中

集合也支持推导式:

a={x for x in 'abcdefg' if x not in 'abc'}
print(a) #{'g', 'f', 'd', 'e'}

字典

在同一个字典之内,关键字必须是互不相同

一对大括号创建一个空的字典:{}

dict={'justin':17,'lalala':18}
print(dict) #{'justin': 17, 'lalala': 18}
print(list(dict.keys()))#['justin', 'lalala']  转换为列表
print('justin' in dict) #True

构造函数 dict() 直接从键值对元组列表中构建字典。如果有固定的模式,列表推导式指定特定的键值对:

print(dict([('justin',17),('lalala',18)]))
#{'justin': 17, 'lalala': 18}

此外,字典推导可以用来创建任意键和值的表达式词典:

print({x:x**2 for x in (2,4,6)})
#{2: 4, 4: 16, 6: 36}

如果关键字只是简单的字符串,使用关键字参数指定键值对有时候更方便:

print(dict(justin=17,lalala=18))
#{'justin': 17, 'lalala': 18}

遍历技巧

在字典中遍历时,关键字和对应的值可以使用 items() 方法同时解读出来:

dict={'justin':17,'lalala':18}
for k,v in dict.items():
    print(k,v)

在这里插入图片描述
在序列中遍历时,索引位置和对应值可以使用 enumerate() 函数同时得到:

for i,v in enumerate([10,20,30,'hhh']):
    print(i,v)

在这里插入图片描述
同时遍历两个或更多的序列,可以使用 zip() 组合:

a=['name','age','high']
b=['justin',17,183]

for m,n in zip(a,b):
    print('what is your {0} ? it is {1}'.format(m,n))

在这里插入图片描述
要反向遍历一个序列,首先指定这个序列,然后调用 reversed() 函数:

for i in reversed(range(1,6)):
    print(i)

在这里插入图片描述
要按顺序遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修改原值:

a=[5,2,3,1,6,1]
for i in sorted(a):
    print(i)

在这里插入图片描述


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值