python3 笔记14 数据结构

Python3数据结构一、列表(https://blog.csdn.net/Lucis_tomato/article/details/115898462) python中列表时可变的,这是它区别于字符串和元组的最重要特点(list可以修改,string及tuple不可改)list方法 方法 描述 list.appedn(x) 添加一个元素到list结尾,等同于a[len(a):]=[x] list.extend(L) 通过添加指定列表的所有元素来...
摘要由CSDN通过智能技术生成

Python3 数据结构

一、列表(https://blog.csdn.net/Lucis_tomato/article/details/115898462)

          python中列表时可变的,这是它区别于字符串和元组的最重要特点(list可以修改,string及tuple不可改)

list方法
方法描述
list.appedn(x)添加一个元素到list结尾,等同于a[len(a):]=[x]
list.extend(L)通过添加指定列表的所有元素来扩充列表,相当于a[len(a):]=L
list.insert(i,x)在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素索引,例如a.insert(0,x) 会插入到整个列表之前,而a.insert(len(a),x) 相当于a.append(x)
list.remove(x)删除列表中值为x的第一个元素。如果没有这样的元素,就会返回一个错误。
list.pop([i])从列表的指定位置移除元素,并将其返回。如果没有指定索引,a.pop()返回最后一个元素。元素随即从列表中被移除
list.clear()移除列表中所有的项,等于del a[:]
list.index(x)返回列表中第一个值为x的元素索引。如果没有匹配项就会返回一个错误。
list.count(x)返回x在列表中出现的次数。
list.sort()对列表中的元素进行排序。
list.reverse()倒排列表中的元素。
list.copy()返回列表的浅复制,等于a[:]

 

二、将列表当当做堆栈使用(后进先出)

            列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。

            用append()方法可以把一个元素添加到堆栈顶。

            用不指定索引的pop()方法可以把一个元素从堆栈顶释放出来。

#!/usr/bin/python3

#将列表当堆栈使用
stack = [3,4,5]
print(stack)
stack.append(6)
stack.append(7)
print(stack)
stack.pop()
print(stack)
stack.pop()
print(stack)
stack.pop()
print(stack)

三、将列表当做队列使用(先进先出)

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

           但是拿列表用作这样的目的效率不高。

           在列表的最后添加或者弹出元素速度快,然而在列表里插入或者头部弹出速度却不快(因为所有其他元素都得一个一个地移动)

#!/usr/bin/python3

from collections import deque

queue = deque(["Eric","John","Michael"])
print(queue)
queue.appendleft(2)
print(queue)
queue.append(2)
print(queue)
queue.popleft()
print(queue)
queue.popleft()
print(queue)

 

四、列表推导式

列表推导式提供了序列创建列表的简单途径。

通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表元素,或者根据确定的判断条件创建子序列。

每个列表推导式都在for之后跟一个表达式,然后有零到多个for或if子句。

返回结果是一个根据表达从 其后的for和if上下文环境中生成出来的列表。

如果希望表达式推导出一个元组,就必须使用括号。

#!/usr/bin/python3

test =[1,2,3,4]
vote = [3*x for x in test]
print(vote)

vote1 = [[x,x**3] for x in test]
print(vote1)

 

#!/usr/bin/python3

freshfruit = ['banana','orange','starwberry','cherry']
result = [w.strip() for w in freshfruit]
print(result)

result2 = [3*w for w in freshfruit if w != 'starwberry']
print(result2)

num1 = [1,3,5,6]
num2 = [2,4,8,0]
result3 = [x*y for x in num1 for y in num2]
print(result3)

num3 = int(input("输入一个数字"))
num4 = int(input("再输入一个数字"))
print(num3,'/',num4,'分别保留1-4位小数是:',[str(round(num3/num4,i)) for i in range(1,5)])

 

五、嵌套列表解析

python的列表还可以嵌套。

#!/usr/bin/python3
#尝试做个矩阵
cube = [
    [1,2,3,4],
    [2,2,3,4],
    [3,2,3,4],
    [4,2,3,4]
]
print(cube)

result1 = [[row[i] for row in cube] for i in range(4)]
print(result1)

result2 = []
for i in range(4):
    result2.append([row[i] for row in cube])

 

另一种解决方案

#!/usr/bin/python3
#另一种实现方法

cube = [
    [1,2,3,4],
    [2,2,3,4],
    [3,2,3,4],
    [4,2,3,4]
]

print(cube)
another = []
for i in range(4):
    another.append([row[i] for row in cube])

print(another) 

 

六、del语句

          使用del语句可以从一个列表中依索引而不是值来删除一个元素。

          这与使用pop()返回一个值不同。

          可以用del语句从列表中删除一个切割,或清空整个列表(我们以前介绍的方法是给该切割赋一个空列表)

#!/bin/usr/python3

list1 = [1,2,3,4,5,6,'s']
del list1[-1]
print(list1)
del list1[2:4]
print(list1)
del list1[:]
print(list1)

 

七、元组和序列

元组由若干逗号分隔的值组成,

#!/usr/bin/python3

tuple1 = 1,2,3,4,5,6
tuple2 = ('a','b','c','d','e','f','g','h','i')

print(type(tuple1),type(tuple2))

print(tuple1[2])

tuple3 = tuple1,(22,33,44,55)
print(type(tuple3),tuple3)

八,集合

集合是一个无序不重复元素的集。

基本功能包括关系测试和消除重复元素。

可以用大括号{}创建集合。

创建一个空集合,你必须使用set()创建空集合而不是{};{表示一个空字典}

#!/usr/bin/python3

basket = ('apple','orange','apple','pear','orange','banana')
print('type(basket)',type(basket),':',basket)
setb = set(basket)
print('type(setb)',type(setb),':',setb)
print('apple in setb is','apple' in setb)
print('bobby in setb is','bobby' in setb)

#集合操作
a = {'日','俄','法','英','美','意','德','奥','意','德','奥'}
b = {'英','加','美','新','美','澳','加','美'}
#证明集合去重
print('a=',a)
print('b=',b)
#在a 不在b
print('a-b:',a - b)
#在a或b中
print('a|b:',a|b)
#a和b均有
print('a&b:',a&b)
#不同时在a或b
print('a^b',a^b)

#集合推倒式

b = {x for x in a if x not in '俄'}
print(b)

 

九、字典

另一个非常有用的python内建数据类型是字典。

序列是以连续的整数位索引,与此不同的是,字典以关键字为索引, 关键字可以是任意不可变类型,通常字符串或数值。

字典是 无序“键与值”对的集合。

字典中的键唯一。

#!/usr/bin/python3
import math
BeTerminated = {'Qin':'BC-207','Han':'BC-230','Zhao':'BC-222','Wei':'BC-225','Chu':'BC-224','Yan':'BC-222'}

print('秦灭亡及同一顺序:',BeTerminated)
BeTerminated[input('所缺少的国家:')] = input('所缺少的国家哪一年被灭:') 
#BeTerminated[input('Qi')] = input('BC-221') 
#BeTerminated['Qi'] = 'BC-221'
print('你给出的结果:',BeTerminated)
print(len(BeTerminated))
#确定正确的规则
x = ['Qin','Han','Zhao','Wei','Chu','Yan','Qi']
#对目标list进行排序
x.sort(reverse=True)
Fbe = (sorted(BeTerminated.keys()))
Fbe.sort(reverse=True)

#判断灭亡是否不等于7
if len(BeTerminated) != 7:
    print('check the set,重新学习')
elif  len(BeTerminated) == 7:
    if x != Fbe:
        print('回去重学吧')
    elif x == Fbe:
        if BeTerminated['Qi']=='BC-221':
            print('继续进行')
        elif BeTerminated['Qi']!='BC-221':
            print('还是回去重学吧')
else :
    print('error') 


#调试试用语句
print('---------------------------------------------------')
print('---------------------------------------------------')
print('---------------------------------------------------')
print('---------------------------------------------------')

print(type(sorted(BeTerminated.keys())))
print(x,',and,',sorted(BeTerminated.keys()))
print(x not in sorted(BeTerminated.keys()))
print(x in sorted(BeTerminated.keys()))
print(x != sorted(BeTerminated.keys()))

print('Qin灭亡于:',BeTerminated['Qin'])

print(x)
print(Fbe)
#2021年5月17日16:57:24 最终确定sorted(BeTerminated.keys()) 为list 类型 明日采用list判断等值的方式处理当前问题

 

ps:若想list1中元素是否与字典元素相等,可使用 sorted(集合名.keys()) 筛出key元素的list2列表,再将两list进行同规则(正序或倒序排序)处理后进行判断,该方式仅适用于去重处理的list中。

如上方式采用set()转换使用或许更好。

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

#!/usr/bin/python3

x = [('Qin','BC-207'),('Han','BC-230'),('Zhao','BC-222'),('Wei','BC-225'),('Chu','BC-224'),('Yan','BC-222')]
f = dict(x)
print(f)

 

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

#!/usr/bin/python3

x = {a : a**3 for a in (1,3,4,5)}
print(x)

 

如果关键字只是简单的字符串,使用关键字指定键值也可以。

#!/usr/bin/python3

t = dict(baoby=250,ergou=500,tongziji=1000)
print(t)

 

十、遍历技巧

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

#!/usr/bin/python3

BeTerminated = {'Qin':'BC-207','Han':'BC-230','Zhao':'BC-222','Wei':'BC-225','Chu':'BC-224','Yan':'BC-222'}
for k , v in BeTerminated.items():
    print(k,v)

 

        10.2 在序列(list)中遍历时,索引位置和对应值可以使用 enumerate()

#!/usr/bin/python3
list1 = [1,2,3,4,5]
for k , v in enumerate(list1):
    print(k,v)

         10.3 同时遍历两个或更多的序列,可以使用zip()组合:

#!/usr/bin/python3
a = ['name','sex','weight']
b = ['Lux','M','50kg']
for a , b in zip(a,b):
    print('What is your {0} ? It is {1}.'.format(a,b))

          10.4 反向遍历一个序列,首先指定这个序列,然后调用 reverse()函数:

#!/usr/bin/python3

BeTerminated = ['Han','Zhao','Wei','Chu','Yan','Qi','Qin']
for i in reversed(BeTerminated):
    print(i)

 

          10.5   要按顺序遍历一个序列,使用sorted()函数 返回一个已排序的序列,并不修改原值:

#!/usr/bin/python3
BeTerminated = ['Han','Zhao','Wei','Chu','Yan','Qi','Qin']
for i in sorted(BeTerminated):
    print(i)

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值