首页 > 技术文章 > python札记

PiaYie 2020-08-15 14:38 原文

字符串方法

  • 使用+运算符进行连接
  • 使用*运算符进行复制
  • 转义字符

转义字符用来输出python中既定的字符

转义字符 实际输出
\\ 反斜杠(\)
\' 单引号(')
\" 双引号(")
\n 换行符
\t 水平制表
\a 响铃
\b 退格backspace  注:一个\b删除前面的一个字符串
\000 空   注:一个空字符
\v 纵向制符表  注:上一行尾巴的下一个位置跳下一行的位置
\r 回车
\f 换页  注:某些终端的效果和\v差不多,有写不然,会换页
\ooo 八进制ooo代表的字符 
\xhh 十六进制hh代表的字符

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 索引操作/负索引
string: ' H e l l o '
indexes:   0 1 2 3 4  

 

 

 

字符串索引是从0开始的

负索引是从字符串的末尾开始往回走,-1代表最后一个字符的索引

举例:

>>> mystring1 = 'hello piayie!' 
>>> mystring1[-1] 
'!'
>>> mystring1[-9] 
'o'

 

  • 分片操作slicing/空分片索引

注意,索引是原字符串的拷贝

分片也是用[],但不同于索引操作,分片要用两个索引标识,用冒号':'分隔

分片计算得到的字符串从第一个索引到第二个索引但不包括第二个索引

空分片索引是指分片使用的标号可以为空:

  如果第一个索引为空,python指定从第一个索引开始

  如果第二个索引为空,python指定这个字符串余下的部分

  索引标识为负数,表示这个位置是从最后一个位置(-1)往回数的位置

举例:

>>> slicing
'hello piayie!'
>>> slicing[:] 
'hello piayie!'
>>> slicing[2:4] 
'll'
>>> slicing[:4]  
'hell'
>>> slicing[2:] 
'llo piayie!'
>>> slicing[-1:] 
'!'
>>> slicing[-9:-2] 
'o piayi'
>>> slicing[-1:-2] 
''
>>> slicing[-1:-9] 
''
>>> slicing[-4:-7] 
''
>>> slicing
'hello piayie!'
>>>
  • upper()和lower()字符串方法

转换为大写和小写,只转换英文字母

举例:

>>> slicing
'hello piayie!'
>>> slicing.upper()
'HELLO PIAYIE!'
>>> slicing
'hello piayie!'
>>> str = '46546s789' 
>>> str.upper()
'46546S789'
>>> str.upper().lower()
'46546s789'
>>>
  • find()字符串方法

find()是用来找索引标识的字符串的方法:

  接受一个字符参数,返回在该字符串中出现的位置,如果找不到这个参数,就返回-1

  接受多个字符的参数,找这一整个东西,找到了的话返回找到的第一个参数的第一个字符的位置

举例:

>>> string2 = 'ABCDEFG' 
>>> string2.find('B') 
1
>>> string2.find('H') 
-1
>>> string2.find('EF') 
4
>>> string3 = 'asdasdasd' 
>>> string3.find('asd')   
0
>>>
  • 字符串格式化

众所周知print()函数方便地输出字符串值。print()也有参数调用:字符串插值

使用%s的字符串格式化可以把一个字符串放入另一个之中:

举例:

>>> print('sdnansd,akds%skldjad' % 777) 
sdnansd,akds777kldjad
>>> print('sdnansd,akds%skl %s djad' % 777, 111) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string
>>> print('sdnansd,akds%skl %s djad' % (777, 111)) 
sdnansd,akds777kl 111 djad
>>>
  • join()字符串方法

join()方法接受一个字符串列表返回一个字符串   即合并,调用jion()的字符串会放到列表里的各字符串之间作为分隔符   常用''.jion(myList)不要分割直接连接起来

>>> eggs = ['dogs', 'cats', 'mose']
>>> ''.jion(eggs) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'jion'
>>> ''.join(eggs) 
'dogscatsmose'
>>> '*'.join(eggs) 
'dogs*cats*mose'
  • startswith()和endwiths()字符串方法

接受一个字符串参数,检查是否以其开头或结尾,返回True或者False

举例:

>>> string3                                        
'asdasdasd'
>>> string3.startswith('asd') 
True
>>> string3.startswith('a')   
True
>>> string3.startswith('awd') 
False
>>> string3.endswith('awd') 
False
>>> string3.endswith('asd')  
True
>>> string3.endswith('d')   
True
>>>
  • title()字符串方法

title()字符串方法返回固定形式,字符串的第一个字母大写,其余小写

举例:

>>> mytitle1 = 'jkljASDDl asdda!' 
>>> mytitle1.title()             
'Jkljasddl Asdda!'
>>> mytitle2 = '45dasd 4ddd!'     
>>> mytitle2.title() 
'45Dasd 4Ddd!'
>>>
  • strip()字符串方法

返回字符串去掉首位空白字符(空格字符、制表符、换行符)的方法

举例:

>>> mystr1 = '\njlajslkd     \nasd\t' 
>>> mystr1
'\njlajslkd     \nasd\t'
>>> print(mystr1) 

jlajslkd
asd
>>> mystr1.strip()
'jlajslkd     \nasd'
>>> print(mystr1.strip()) 
jlajslkd     
asd
>>>
  • isupper()和islower()字符串方法

  'a string'.isupper()返回True

    1.这个字符串没有任何小写字母

  'a string'.islower()返回True

    1.这个字符串没有任何大写字母

举例:

>>> string1 = 'aaaaaa' 
>>> string2 = 'aAaaaa' 
>>> string3 = 'BBBBBB' 
>>> string4 = 'BbBBBB' 
>>> string1.isupper()
False
>>> string2.isupper() 
False
>>> string5 = 'asdasdJJJJJJ' 
>>> string5.isupper()        
False
>>> string3.isupper() 
True
>>> string4.isupper() 
False
>>> string1.islower() 
True
>>> string2.islower() 
False
>>> string3.islower() 
False
>>> string4.islower() 
False
>>> string5.islower() 
False
>>>
  • 字符串与bytes对象 之 encode()和decode()方法

encode()字符串方法将返回一个"Bytes"对象,是普通字符串值前面加上一个'b'  b和后面的字符串之间没有空格

>>> spam = 'hello'.encode('ascii')  
>>> spam
b'hello'
>>> list(spam) 
[104, 101, 108, 108, 111]
>>> len(spam) 
5
>>> spam[2] 
108
>>>

可以通过调用bytes()函数来创建"Bytes"对象

>>> spam = bytes([123, 854, 25, 69, 255]) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: bytes must be in range(0, 256)
>>> spam = bytes([123, 85, 25, 69, 255])  
>>> spam
b'{U\x19E\xff'
>>> spam = b'World' 
>>> spam
b'World'
>>> list(spam) 
[87, 111, 114, 108, 100]
>>>
  • decode()• bytes对象方法
在一个"bytes"对象上调用decode()方法,返回这个bytes对象里保存的字符串
>>> spam = bytes([104, 101, 108, 108, 111]) 
>>> spam
b'hello'
>>> spam.decode('ascii') 
'hello'
>>>
  • split('?')字符串方法

返回字符串列表,参数?为希望用来分割这个长字符串的分隔符号

举例:

>>> mystr = "hjkshad asjdh lijsd 1222" 
>>> mystr.split(' ') 
['hjkshad', 'asjdh', 'lijsd', '1222']
>>> mystr.split('s') 
['hjk', 'had a', 'jdh lij', 'd 1222']
>>> mystr.split('sjd') 
['hjkshad a', 'h lijsd 1222']
>>>

 

input()函数

当input()被调用时,程序等待用户输入一些文字并按Enter完成字符串赋值

举例:

>>> a = input() 
asdasdas
>>> a
'asdasdas'
>>> a[0]  
'a' 
>>> a[1] 
's' 
>>> b = input()
[4554, 'dasdas', 444] 
>>> b
"[4554, 'dasdas', 444]"
>>> b[0] 
'[' 
>>> c = input()
555
>>> c
'555'

len()方法

很对类型都有len()方法,返回该实体里的项的个数

举例:

>>> len('asdzxc')  
6
>>> len([456,4565,12323]) 
3
>>> len((45665,12332,545,'asd'))        
4
>>> len({a:1, b:2})     
2

range()方法

根据参数返回一个区间数据类型的值

举例:

>>> range(10) 
range(0, 10)
>>> print(range(10)) 
range(0, 10)
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(2,10)) 
[2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(2, 10, 2)) 
[2, 4, 6, 8]
>>>

math.ceil()、math.floor()方法和round()函数

math.ceil()向上取整

round()四舍五入

math.floor()向下取整

举例:

>>> import math
>>> math.ceil(52/7) 
8
>>> math.floor(52/7) 
7
>>> round(52/7)      
7
>>> 52/7
7.428571428571429
>>>

伪随机数和random.seed()、random.randint()方法+random.shuffle方法

伪随机并不是真正的随机,而是使用某种算法,需要一颗种子,从一个种子产生的所有随机数都是可以预测的(python只有在首次导入random时候才会产生不可预测的随机数字)

调用random.seed()重设种子。

random.shuffle()方法接受一个列表参数,然后随机排列该列表,很重要的是:就地修改

举例:

>>> for i in range(5):
...     print(random.randint(1,10))
... 
5
5
10
4
10
>>>
>>> list1        
[1, 2, 3, 4, 5, 7777, 999]
>>> random.shuffle(list1); list1
[999, 7777, 3, 4, 2, 5, 1]
>>>

copy.deepcopy()方法

记住列表有列表的引用,字典也是,列表本身只有一个,他的引用可以有很多个   但是也可以用copy.deepcopy()来实现创建列表本身而不是复制引用值

>>> list1 = [1, 2, 3, 4, 5] 
>>> list2 = list1; list2
[1, 2, 3, 4, 5]
>>> list1.append(7777); list2
[1, 2, 3, 4, 5, 7777]
>>> import copy
>>> list3 = copy.deepcopy(list1) 
>>> list1.append(999) 
>>> list2
[1, 2, 3, 4, 5, 7777, 999]
>>> list3
[1, 2, 3, 4, 5, 7777]
>>>

sys.exit()

提前让程序终止并退出执行。

os.path.exists()

检查某个文件名是否已经存在。返回True或者False

举例:

>>> import os
>>> os.path.exists('asdsadad') 
False
>>> os.path.exists('wordPatterns.py') 
True
>>> os.path.exists('D:\\Users\\PiaYie\\AppData\\Local\\Programs\\Python\\Python38-32')
True
>>>

time模块和time.time()函数

计算机有一个时钟跟踪当前的时间,通过哟time.time()调用,返回一个浮点数,表示自1970年1月1日起的秒数,叫做Unix Epoch

举例:

>>> import time
>>> t1 = time.time(); t1
1597824931.5516808
>>> t2 = time.time(); t2 
1597824939.6313002
>>> t2 - t1
8.079619407653809
>>>

pprint模块、pprint.pprint()和pprint.pfromat()函数

美化输出

 

 

itertools.product()函数

  itertools.product()函数生成列表或类列表值(如 字符串或者元组)里的每项的每种可能组合。

    返回itertools.product对象值,需要把这个值传给列表

    这种组合又名笛卡尔乘积。

exampl1:(3^4 = 81种组合)

>>> itertools.product('ABC', repeat=4)  
<itertools.product object at 0x011F8CC8>
>>> list(itertools.product('ABC', repeat=4)) 
[('A', 'A', 'A', 'A'), ('A', 'A', 'A', 'B'), ('A', 'A', 'A', 'C'), ('A', 'A', 'B', 'A'), ('A', 'A', 'B', 'B'), ('A', 'A', 'B', 'C'), ('A', 'A', 'C', 'A'), ('A', 'A', 'C', 'B'), ('A', 'A', 'C', 'C'), ('A', 'B', 'A', 'A'), ('A', 'B', 'A', 
'B'), ('A', 'B', 'A', 'C'), ('A', 'B', 'B', 'A'), ('A', 'B', 'B', 'B'), ('A', 'B', 'B', 'C'), ('A', 'B', 'C', 'A'), ('A', 'B', 'C', 'B'), ('A', 'B', 'C', 'C'), ('A', 'C', 'A', 'A'), ('A', 'C', 'A', 'B'), ('A', 'C', 'A', 'C'), ('A', 'C', 
'B', 'A'), ('A', 'C', 'B', 'B'), ('A', 'C', 'B', 'C'), ('A', 'C', 'C', 'A'), ('A', 'C', 'C', 'B'), ('A', 'C', 'C', 'C'), ('B', 'A', 'A', 'A'), ('B', 'A', 'A', 'B'), ('B', 'A', 'A', 'C'), ('B', 'A', 'B', 'A'), ('B', 'A', 'B', 'B'), ('B', 
'A', 'B', 'C'), ('B', 'A', 'C', 'A'), ('B', 'A', 'C', 'B'), ('B', 'A', 'C', 'C'), ('B', 'B', 'A', 'A'), ('B', 'B', 'A', 'B'), ('B', 'B', 'A', 'C'), ('B', 'B', 'B', 'A'), ('B', 'B', 'B', 'B'), ('B', 'B', 'B', 'C'), ('B', 'B', 'C', 'A'), ('B', 'B', 'C', 'B'), ('B', 'B', 'C', 'C'), ('B', 'C', 'A', 'A'), ('B', 'C', 'A', 'B'), ('B', 'C', 'A', 'C'), ('B', 'C', 'B', 'A'), ('B', 'C', 'B', 'B'), ('B', 'C', 'B', 'C'), ('B', 'C', 'C', 'A'), ('B', 'C', 'C', 'B'), ('B', 'C', 'C', 'C'), ('C', 'A', 'A', 'A'), ('C', 'A', 'A', 'B'), ('C', 'A', 'A', 'C'), ('C', 'A', 'B', 'A'), ('C', 'A', 'B', 'B'), ('C', 'A', 'B', 'C'), ('C', 'A', 'C', 'A'), ('C', 'A', 'C', 'B'), ('C', 'A', 'C', 'C'), ('C', 'B', 'A', 'A'), ('C', 'B', 'A', 'B'), ('C', 'B', 'A', 'C'), ('C', 'B', 'B', 'A'), ('C', 'B', 'B', 'B'), ('C', 'B', 'B', 'C'), ('C', 'B', 'C', 'A'), ('C', 'B', 'C', 'B'), ('C', 'B', 'C', 'C'), ('C', 'C', 'A', 'A'), ('C', 'C', 'A', 'B'), ('C', 'C', 'A', 'C'), ('C', 'C', 'B', 'A'), ('C', 'C', 'B', 'B'), ('C', 'C', 'B', 'C'), ('C', 'C', 'C', 'A'), ('C', 'C', 'C', 'B'), ('C', 'C', 'C', 'C')]
>>> import pprint

example2:(8^5 = 32768)

>>> mylist = list(itertools.product(range(8), repeat=5))
>>> len(mylist) 
32768
>>>

注意遍历次序:

>>> list(itertools.product(range(3), repeat=3)) 
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 2, 0), (0, 2, 1), (0, 2, 2), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 2, 0), (2, 2, 1), (2, 2, 2)]
>>>

 

推荐阅读