#python数据结构(list)
## 分类
数值型:int、float、complex、bool
序列对象:字符串 str 列表 list 元组 tuple
键值对: 集合 set 字典 dict
## 数字的处理函数
math.e math.pi: 自如常数和π
round(): 四舍六入五去偶
floor(): 取整数位
ceil(): 整数位 +1
min(): 取最小的那个
max(): 取最大的那个
pow(): 等于x**y
math.sqrt(): 取根号
bin() oct() hex() : 二进制、八进制、十六进制
## 类型判断
type(object) , 返回类型,不是字符串
isinstance(object , class_or_tuple) 例如: isinstance(‘a’ , int) 返回的是False
## 列表list
定义:列表是一个队列,有若干个元素组成,可以是任意对象(数字、字符串、对象、列表),并且是可变的
lst = list() lst = [] lst = [1,2,3,’abc’] lst = list(range(5))
列表索引访问:
正索引:从左到右,从0开始,为列表中每一个元素编号
负索引:从右到左,从-1开始
list[index],列表通过索引可以访问,使用中括号。
列表查询:
index(value,[start,[stop]]):从指定区间查找匹配的元素,匹配到第一个就立即返回索引。
count(value) 返回列表中匹配的次数
时间复杂度:O(1) 、O(n) 、O(n^2)、O(n^3),n越大耗时越长,效率越低。
len():返回列表元素的个数
列表元素的修改:
list[index] = value
列表增加、插入元素
list1.append(object) 时间复杂度O(1)
list1.insert(index,object) 时间复杂度O(1)
list1.extend(list2) 将可迭代对象元素追加进来,就地修改
list1 + list2 连接操作,将两个列表连接起来,产生新的列表,原列表不变
list1*5 本列表中的元素将重5次,返回新的列表
列表删除元素
remove(value):从左至右查找第一个匹配value的值,并移除该元素,返回None,就地修改
list1.pop([index]):不指定索引就从尾部弹出一个元素,指定索引就从索引处弹出元素
list1.clear():清除列表中的所有元素,剩下一个空列表
列表其他操作
list1.reverse():将列表反转,就地修改
list1.sort(key=None,reverse=False):对列表进行排序,就地修改,默认升序;reverse为True,反转,降序。key一个函数,指定key排序。
列表复制
list2 = list1.copy() 返回一个新列表
shadow copy:浅拷贝,遇到引用类型,只复制一个引用而已
lst5 = copy.deepcopy(lst0) :深拷贝。重新创建一个新的列表,让lst5指向它
随机数
random模块
randint(a,b):返回[a,b]之间的整数
choice(seq) : 从非空序列的元素中挑选一个 random.choice(range(10)),从0到9中随机挑选一个整数[1,3,5,7]
randrange([start,] stop [,step]) 按指定基数递增的集合中获取一个随机数。例如:random.randage(1,7,2)
random.shuffle(list):就地打乱列表元素。
## 数列解决100以内素数问题
import math
prime = []
flag = False
for i in range(2,100):
for j in prime:
if i%j == 0:
flag = True
break
if j >= math.ceil(math.sqrt(i)):
flag = False
break
if not flag:
prime.append(i)
print(prime)
## 杨辉三角
法1:
triangle = []
n = 6
for i in range(n):
if i == 0:
triangle.append([1])
else:
pre = triangle[i-1]
cur = [1]
for j in range(0,i-1):
cur.append(pre[j]+pre[j+1])
cur.append(1)
triangle.append(cur)
print(triangle)
法1(2):
tri = []
n = 6
for i in range(n):
row = [1]
tri.append(row)
if i == 0:
continue
for j in range(i-1):
row.append(tri[i-1][j] + tri[i-1][j+1])
row.append(1)
print(tri)
法2:
n = 6
oldline = []
newline = [1]
length = 0
print(newline)
for i in range(1, n):
oldline = newline.copy()
oldline.append(0)
newline.clear()
for j in range(i+1):
newline.append(oldline[j-1] + oldline[j])
print(newline)
法3 :
triangle = []
n = 6
for i in range(n):
row = [1]*(i+1)
triangle.append(row)
if i == 0:
continue
for j in range(1,i//2+1):
val = triangle[i – 1][j-1] + triangle[i – 1][j]
row[j] = val
if j != i – j: #判断要不要对称复制
row[-j-1] = val
print(triangle)
# python数据结构(tuple)
## 元组定义
元组是一个有序的元素组成的集合,()表示,元组是不可变对象。
t = (22,) t = (2,)*7 t = (1,2,3)*6
元组查询和元素索引访问与列表相似
## 命名元组namedtuple
from collections import namedtuple
Point = namedtuple(‘Point’,[‘x’,’y’])
p = Point(11,22)
>>> p.x = 11 p.y = 22
Student = namedtuple(‘Student’,’name age’)
tony = Student(‘tony’,17)
petter = Student(‘petter’,18)
>>>petter.name = petter
## 冒泡法
时间复杂度O(n^2)
num = [1,9,3,5,7,6,8,2,4]
for i in range(len(num)):
flag = False
for j in range(len(num)-i-1):
if num[j] > num[j+1]:
tmp = num[j]
num[j] = num[j+1]
num[j+1] = tmp
flag = True
if not flag: #为了判断是否在前一步就已经完成
break
print(num)
# 字符串
## 字符串定义
字符串由一个个字符组成的序列,使用单双三引号引住,具有不可变属性
s1 = ‘string’ s2 = r’hello \n magedu.com’
## 字符串连接
“string”.join(iterable)
例如:lst = [‘1′,’2′,’3’]
## 字符串分割
split:将字符串按照分隔符分割成若干字符串,并返回列表
partition:将字符串按照分隔符分割成2段,返回这2段和分隔符的元组
## 字符串判断
s.startswith(‘very’,5) >>>True
s.endswith(‘very’,5) >>> False
s.endswith(‘sorry’,5,-1) >>>False
## 字符串判断
isalnum() 判断是否是字母数字组成
isalpha() 判断是否是字母
isdecimal() 是否只包含十进制
isdigit() 是否全部数字
isidentifier() 判断是不是标识符
islower() 是否小写
isupper() 是否大写
isspace() 是否空格字符
## 字符格式化
“{}{}”.format(*args,**kwargs) #arg是一个元组
“{}:{}”.format(‘192.168.1.100’,8888)
“{server} {1}:{0}”.format(8888, ‘192.168.1.100’, server=’Web Server Info : ‘)
访问元素:
“{0[0]}.{0[1]}”.format((‘magedu’,’com’))
对象属性访问:
from collections import namedtuple
Point = namedtuple(‘Point’,’x y’)
p = Point(4,5)
“{{{0.x},{0.y}}}”.format(p)
对齐:
‘{0}*{1}={2:<2}’.format(3,2,2*3)
‘{0}*{1}={2:<02}’.format(3,2,2*3)
‘{0}*{1}={2:>02}’.format(3,2,2*3)
进制:
octets = [192, 168, 0, 1]
‘{:02X}{:02X}{:02X}{:02X}’.format(*octets)
## 练习
输入一串数字,判断是几位数字,打印每一位数字及其重复的次数,一次打印个十百千万位
num = “”
print(‘请输入一个数字’)
while True:
num = input().strip().lstrip(‘0’)
if num.isdigit():
break
else:
print(‘不合规范重新输入’)
print(‘{}’.format(len(num)))
count = [0]*10
for i in range(10):
count[i] = num.count(str(i))
for i in range(10):
if count[i]:
print(‘数字{}出现的次数是{}’.format(i,count[i]))
lst = list(num)
lst.reverse()
print(lst)
## 倒序打印
(1)
for i in range(len(num),0,-1):
print(i,end = ‘ ‘)
print()
(2)
for i in reversed(num):
print(i,end=’ ‘)
print()
(3) 负索引打印
for i in range(len(num)):
print(num[-i-1],end=” “)
print()
## 判断0-9的字数在字符串中出现的次数。
(1) 迭代字符串中本身的字符
counter = [0]*10
for x in num:
i = int(x)
if counter[i] == 0:
counter[i] = num.count(x)
print(“The count of {} is {}”.format(x,counter[i]))
(2) 迭代字符串本身的字符
counter = [0]*10
for x in num:
i = int(x)
counter[i] += 1
for i in range(len(counter)):
if counter[i]:
print(“The count of {} is {}”.format(i,counter[i]))
## bytes 、bytearry
bytes:不可变字节序列
bytearray:字节数组,可变
编码:字符串按照不同的字符集编码encode返回字节序列bytes
encode(encoding = ‘utf – 8’,error = ‘strict’)
解码:字节序列按照不同的字符集解码decode返回字符串
bytes.decode(encoding=’utf – 8′,error = ”strict)
bytearray.decode(encoding=’utf – 8′,error = ”strict)
bytes(string,encoding) 等价于 string.encode()
用法: 和str类似
b’abcdef’.replace(b’f’,b’k’)
b’abc’.find(b’b’)
bytes.fromhex(string) —->>返回字符串
‘abc’.encode().hex() —->> 返回一个十六进制数
索引:b’abcdef'[2],返回该字节对应的数。int类型
bytearray操作:
与bytes类型的方法相同
bytearray(b’abcdef’).replace(b’f’,b’g’)
bytearray(b’abcdef’).find(b’f’) ——->> 返回5
hex():
bytearray.fromhex(‘6162 09 6a 6b00’)
bytearray(‘abc’.encode()).hex()
索引:
bytearray(b’abcdef’)[2] —–>>返回int类型对应的数
内置操作:
append(),insert(),extend(),pop(),remove() 用法与list相似 PS:(使用时int类型)
clear() 清空, reverse() 反转,就地修改
## 切片操作( 方向向右为正,否则步长为负 )
线性结构:可迭代for…in…
len()方法获取长度
通过下标可以访问
‘www.magedu.com’[4:10] >>>magedu
‘www.magedu.com’[4:10] >>>www.magedu
b’www.magedu.com'[-40:10] >>>b’www.magedu’
bytearray(b’www.magedu.com’)[-4:-10:-2] >>>bytearray(b’.dg’)
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87533