python第二周

#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

(0)
miraclermiracler
上一篇 2017-09-23 18:24
下一篇 2017-09-24 11:23

相关推荐

  • 磁盘管理及shell脚本编程练习

    1、创建一个10G分区,并格式为ext4文件系统 a) 要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl; ~]# mke2fs –t ext4 –b 2048 –m 2 –L MYDATA  /dev/sda3 b) 挂载至/data/madata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; ~…

    2017-11-15
  • 一键搭建mysql集群系列二

    mysql 5.7  主从复制 本节是在上一节的基础之上做的操作,上节我们通过脚本实现了一键自动化安装mysql5.7,这次我们要在三台机器上部署msyql5.7,并实现主从复制,实现的宗旨是,能自动化,就尽量自动化,实在不能自动化,那就手工化 用的脚本和文件说明1.install_mysql.sh 自动化安装mysql脚本2.ntpdate.sh 时间同步…

    2017-05-21
  • LVM2 ( Blog4 )

    LV基本应用,扩展及缩减实现

    Linux干货 2017-11-27
  • LVM2:创建、使用、扩展、缩减、快照五步骤

    LVM2这是个关键的概念,还是从操作中比较容易理解 1、创建一个至少有两个PV组成的大小为40G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录 注意点:在vmware中添加两块硬盘,但是并不能马上可以查看,需要扫描一下磁盘,磁盘未/dev/sdc,/dev/sdd 然后创建LVM的基…

    Linux干货 2016-09-05
  • linux 磁盘管理

    磁盘管理 Linux思想一切皆文件: open(),read(),write(),close() I/O 设备地址 设备类型: 块设备:block,存取单位“块”,磁盘 (随机访问) 字符设备:char,存取单位“字符”,键盘 (逻辑访问) 设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通讯。 设备编号: ll /dev/sda* root…

    Linux干货 2016-08-29
  • Linux平台的4个最佳开源代码编辑器

    原文出处: Abhishek   译文出处:Linux中国 su-kaiyao   正在寻找Linux平台最棒的代码编辑器?如果你询问那些很早就玩Linux的人,他们会回答是Vi, Vim, Emacs, Nano等。但是,我今天不讨论那些。我将谈论一些新时代尖端、漂亮、时髦而且十分强大, 功能丰富…

    Linux干货 2015-03-02