python小笔记

python小笔记

个人python小笔记



前言

因为之前都用matlab编程,很久没有写过python了,语法有点的忘记了,所以做个python小笔记捡起来。。。


strip()

  strip()方法用于移除字符串头尾指定的字符(默认为空格或换行符号)或字符序列。
  注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
  用法:

str.strip([char])

例子:

s1='a123a'
s2=s1.strip('a')   #只能删除开头或是结尾
print(s2)          #s2: 123 

split()

描述
  split()方法通过指定分隔符对字符串进行切片,如果参数num有指定值,则分割num+1个子字符串

语法

str.split(str="",num=string.count(str)).

参数
str–分隔符,默认为空字符,包含空格、换行(\n)、制表符(\t)等。
num–分割次数。默认为-1,即分割所有。

返回值
返回分割后的字符串。

实例

txt="Line1-abcdef \nLine2-abc \nLine4-abcd"
txt.split()

output:

['Line1-abcdef', 'Line2-abc', 'Line4-abcd']

map()

描述
  map()方法是python内置方法(不用导包),第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的新列表。

语法

map(function,iterable,...)

参数

function–函数
iterable–一个或者多个序列


返回值
python3返回迭代器

实例

def square(x) :         # 计算平方数
...     return x ** 2
list(map(square, [1,2,3,4,5]))   # 使用 list() 转换为列表

output:

[1, 4, 9, 16, 25]

字典

在这里插入图片描述

   字典是一种可变容器模型,可存储任意类型对象
字典的每个键值key=>value对冒号(:)分割,每个键值对之间用逗号(,)分割,整个字典包括在花括号( {} )中,格式如下:

d={key1:value1,key2:value2}

键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
一个简单的字典实例:

dict1={'Alice':'234','Beth':'902','Cecil':'3258'}

访问字典里的值
   访问字典值用字典名称接上方括号里面的键值访问(dict1[‘Alice’])

dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print "dict1['Name']: ", dict1['Name']

output:

Zara

修改字典
   向字典添加新内容的方法是增加新的键值/值对,实例如下:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
 
dict['Age'] = 8              # 更新
dict['School'] = "RUNOOB"    # 添加

删除字典元素
能删单一的元素也能清空字典,清空只需一项操作。
显示删除一个字典用del命令,如下实例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del dict['Name']  # 删除键是'Name'的条目
dict.clear()      # 清空字典所有条目
del dict          # 删除字典

字典键的特性
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行

if条件判断

  (一行)if 简单条件判断

c=[]
d=c if len(c)!=0 else 'c是一个空列表'
print(d)
>>>c是一个空列表

for循环

   Python for循环可以遍历任何可迭代对象,如一个列表或者一个字符。
for循环的一般格式如下:

for <variable> in <sequence>:
    <statements>
else:
    <statements>

实例

languages = ["C", "C++", "Perl", "Python"] 
for x in languages:
...print (x)
... 
C
C++
Perl
Python

range()函数
  如果需要遍历数字序列,可以使用内置range()函数。他会生成数列

for i in range(5):
...print(i)
...
0
1
2
3
4

也可以使用range指定区间的值

for i in range(5,9) :
	print(i)
5
6
7
8

也可以使range以指定数字开始并指定不同步长(甚至可以是负数)
(第三个参数为步长)

for i in range(0, 10, 3) :
	print(i)
0
3
6
9

结合range()和len()函数可以遍历一个序列的索引

a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
for i in range(len(a)):
...print(i, a[i])
... 
0 Google
1 Baidu
2 Runoob
3 Taobao
4 QQ

还可以使用range()函数来创建一个列表

list(range(5))
[0, 1, 2, 3, 4]

break 与 continue

在这里插入图片描述
注意
   for循环的游标不会被循环内部改变

for i in range(5):
    print(i)
    i=i+1
0
1
2
3
4

for循环递减
  用range(start,stop[,step])实现循环递减计数

for i in range(3,-1,-1):
	print(i)
>>>3
>>>2
>>>1
>>>0

python枚举

  python 枚举通过enumerate()函数实现。enumerate()函数用于将一个可遍历的数据对象(入列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环中。
语法 enumerate(sequence,[start=0])
  参数 squence:一个序列、迭代器或其它支持迭代的对象
  参数 start:下标起始位置

例子

seasons=['Sping','Summer','Fall','Winner']
list(enumerate(seasons))
>>>[(0,'Sping'),(1,'Summer'),(2,'Fall'),(3,'Winner')]

i=0
seq=['one','two','three']
for i,element in enumerate(seq):
  print(i,element)

递归

	递归中使用@lru_cache(None)来记录缓存当作备忘录。

例子(编辑距离):

  @lru_cache(None)
  def dp(i,j):                #dp(i,j)返回s1[0...i]和s2[0...j]的最小编辑距离
      if i==-1: return j+1    #basecaes,其中一个字符串已经匹配结束
      if j==-1: return i+1
      ans=0
      if word1[i]==word2[j]:  #相等,进入下一个匹配
          ans=dp(i-1,j-1)
      else:                   #不相等,从插入、删除、替换三种操作中选择一种
          ans=min(dp(i,j-1), dp(i-1,j), dp(i-1,j-1))+1
      return ans 

  return dp(len(word1)-1,len(word2)-1)

第一行中的@lru_cache(None)相当于备忘录中的三行代码

  def dp(i,j):                #dp(i,j)返回s1[0...i]和s2[0...j]的最小编辑距离
      if i==-1: return j+1    #basecaes,其中一个字符串已经匹配结束
      if j==-1: return i+1
      ans=0
      if (i,j) in memo:return memo[(i,j)]
      if word1[i]==word2[j]:  #相等,进入下一个匹配
          ans=dp(i-1,j-1)
      else:                   #不相等,从插入、删除、替换三种操作中选择一种
          ans=min(dp(i,j-1), dp(i-1,j), dp(i-1,j-1))+1
      memo[(i,j)]=ans 
      return ans 
      
  memo={}
  return dp(len(word1)-1,len(word2)-1)

  在记忆化递归中调用cache_clear()清除缓存,能够加速程序运行。
例子:

  @lru_cache(None)
  def dp(s,e,m):                 #dp(s,e,m)返回在nums[s...e]执行m步操作的最大分数
      if m==n:return 0           #baseline,执行恰好m步操作                   
      ans=max(multipliers[m]*nums[s]+dp(s+1,e,m+1),multipliers[m]*nums[e]+dp(s,e-1,m+1))   #每次可以选择开头s或者结尾e的数
      return ans 

  n=len(multipliers)
  return dp(0,len(nums)-1,0)     #返回nums[0...结尾]从0步开始执行的最大分数

  调用cache_clear()清除缓存

  @lru_cache(None)
  def dp(s,e,m):                 #dp(s,e,m)返回在nums[s...e]执行m步操作的最大分数
      if m==n:return 0           #baseline,执行恰好m步操作                   
      ans=max(multipliers[m]*nums[s]+dp(s+1,e,m+1),multipliers[m]*nums[e]+dp(s,e-1,m+1))   #每次可以选择开头s或者结尾e的数
      return ans 

  n=len(multipliers)
  ans=dp(0,len(nums)-1,0)
  dp.cache_clear()               #调用cache_clear()清楚缓存
  return ans 

设置最大递归深度

import sys
sys.setrecursionlimit(最大递归深度值)

sorted()

  sorted()函数对所有可迭代对象进行排序操作。
sort与sorted的区别
  sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
  list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
语法

sorted(iterable, key=None, reverse=False)  

参数说明:
  iterable – 可迭代对象。
  key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

实例

sorted([5, 2, 3, 1, 4])
>>>[1, 2, 3, 4, 5]                      # 默认为升序

  也可以使用 list 的 list.sort() 方法。这个方法会修改原始的 list(返回值为None)。通常这个方法不如sorted()方便-如果你不需要原始的 list,list.sort()方法效率会稍微高一些。

a=[5,2,3,1,4]
a.sort()        #list的sort方法没有返回值
>>> a
[1,2,3,4,5]

  list.sort() 方法只为 list 定义。而 sorted() 函数可以接收任何的 iterable

sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})  #字典也能sort
>>>[1, 2, 3, 4, 5]
array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
array = sorted(array,key=lambda x:x["age"])
print(array)
>>>[{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]

count()

描述
  count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
语法

str.count(sub, start= 0,end=len(string))

参数
  sub – 搜索的子字符串
  start – 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
  end – 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。

返回值
  该方法返回子字符串在字符串中出现的次数。
实例

str = "this is string example....wow!!!";
 
sub = "i";
print "str.count(sub, 4, 40) : ", str.count(sub, 4, 40)
sub = "wow";
print "str.count(sub) : ", str.count(sub)

output

str.count(sub, 4, 40) :  2
str.count(sub) :  1

类型转换

在这里插入图片描述

位运算

  按位运算就是把数字看作二进制进行计算。

运算符描述规则
&按位与 (全1得1)(1&1)为1,(1&0) 、(0&1)、(0 & 0)为0
l按位或(有1得1)(1 l 0) 、(0 l 1) 、(1 l 1) 为1,(0 l 0)为0
^异或运算(相异为1)(1 ^ 0)、( 0 ^ 1 )为1,(0 ^ 0 )、( 1 ^ 1)为0
~取反~1为0, ~ 0 为1
<<左移(低位变0)a=15 (1111)2, a<<1 为 a=30(11110)2
>>右移(高位变0)a=15(1111)2, a>>1 为 a=7(0111)2

字符串

字符串运算符

  [:]截取字符串中的一部分,遵循左闭右开原则,str[0:2]是不包含第三个字符的
实例

a='HelloPython'
print(a[1])
>>>e
print(a[1:4])
>>>ell

字符串格式化函数(str.format)

  格式化字符串函数str.format()通过{}和:来代替%
实例:

"{} {}".format("hello","world")       #不设置指定位置,按默认顺序
>>>'hello world'
"{1} {0}".format("hello","world")     #设置指定位置
>>>'world hello'
"{1} {0} {1}".format("hello","world") #设置多个指定位置
>>>'world hello word'

实例(设置参数):

print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
>>>网站名:菜鸟教程, 地址 www.runoob.com

site={"name":"菜鸟教程","url":"www.runoob.com"} #通过字典设置参数
print("网站名:{name},地址 {url}".format(**site))
>>>网站名:菜鸟教程, 地址 www.runoob.com

my_list=['菜鸟教程','www.runoob.com']          #通过列表索引设置参数
print("网站名:{0[0]},地址 {0[1]}".format(my_list))))
>>>网站名:菜鸟教程, 地址 www.runoob.com

列表

在这里插入图片描述

创建二维列表
语法
创建一个row*col的二维列表A

A=[[0]*col for _ in range(row)]

列表函数

列表方法

list.extend()

  extend()函数用于在列表末尾一次性追加另一个序列中的多个值。

语法

list.extend(seq)

实例

list1 = ['Google', 'Runoob', 'Taobao']
list2=list(range(5)) # 创建 0-4 的列表
list1.extend(list2)  # 扩展列表(不同数据类型)
>>>['Google', 'Runoob', 'Taobao', 0, 1, 2, 3, 4] 

list.index()

描述
  index() 函数用于从列表中找出某个值第一个匹配项的索引位置。
语法

list.index(x[,start[,end])

参数
  x-- 查找的对象。
  start-- 可选,查找的起始位置。
  end-- 可选,查找的结束位置。

返回值
  该方法返回查找对象的索引位置,如果没有找到对象则抛出异常。

实例

list1 = ['Google', 'Runoob', 'Taobao']
list1.index('Taobao')
>>>2

list.reverse()

  list.reverse() 函数用于反向列表中的元素。

实例

list1 = ['Google', 'Runoob', 'Taobao', 'Baidu']
list1.reverse()
>>>['Baidu', 'Taobao', 'Runoob', 'Google']

列表多关键字排序

  可以利用sorted和lambda的组合进行多关键字排序
实例

l = [['a', 2], ['c', 1], ['d', 4], ['b', 2]]
sorted(l,key=lambda x:(x[1],x[0]), reverse=True) #按l的l[1]关键字先排序,后按l[0]关键字再排序
>>>[['d',4],['b',2],['a',2],['c',1]]

如果需要第二个关键词降序排序需要先判断第二个关键词类型,如果是数字那么可以直接加负号,如果不是数字可以先转ASCII码再排序。

l = [['a', 2], ['c', 1], ['d', 4], ['b', 2]]
sorted(l,key=lambda x:(x[1],-ord(x[0])), reverse=True) #按l的l[1]关键字先排序,后按l[0]关键字再排序
>>>[['d', 4], ['a', 2], ['b', 2], ['c', 1]]

集合(python3)

在这里插入图片描述

  集合(set)是一个无序的不重复序列
  可以使用大括号{}或者set()函数创建集合,需要注意的是创建一个空集合必须用set()而不是{},因为{}是用来创建一个空字典。

创建集合

parame={value01,value02,...}
#或则
s=set('bcaa')
>>>{'a', 'b', 'c'}   #无序不重复

集合运算

  交(&)、并(|)、差(-)

a = set('abracadabra')
b = set('alacazam')
a&b         #a交b
>>>{'a', 'c'}
a|b         #aUb
>>>{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
a-b         #差集
{'r', 'd', 'b'}

集合基本操作

  1.添加元素

s.add(x)
s.update(x)

  2.移除元素

s.remove(x)    #如果元素不存在,则会发生错误
s.discard(x)   #如果元素不存在,不会发生错误

  3.判断元素是否在集合中存在

x in s

堆模块

  堆(heap)是一种优先队列,能够以任意顺序添加对象,并随时找出/并删除最小的元素。
  python中可以通过 import heapq模块来实现堆
  heapq模块默认只支持小根堆,大根堆的实现可以添加数据的相反数

引入堆模块

import heapq     #其中,heap指示堆,q指示队列

堆操作

将元素压入堆中

heapq.heappush(heap,x)   #将元素x压入堆heap(列表)中

弹出最小元素

heapq.heappop(heap)    #从堆中弹出最小的元素
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值