python常用工具手册(二)

string模块

string模块中的常量

>>> import string
>>> string.digits # 十进制数
'0123456789'
>>> string.hexdigits # 十六进制数
'0123456789abcdefABCDEF'
>>> string.octdigits # 八进制数
'01234567'
>>> string.letters # 英文字母
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.lowercase # 小写英文字母
'abcdefghijklmnopqrstuvwxyz'
>>> string.uppercase # 大写英文字母
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.printable # 可输出在屏幕上的字符
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
>>> string.punctuation # ASCII符号
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> string.whitespace # 空白字符
'\t\n\x0b\x0c\r '

string.atof(s)
将字符串转为浮点型数字

>>> string.atof('3.14')
3.14
>>> string.atof('128')
128.0

string.atoi(s, base=10)
将字符串s转为整型数字, base指定数字的进制, 默认为十进制

>>> string.atoi('1024')
1024
>>> string.atoi('52', base=10)
52
>>> string.atoi('FF', base=16)
128
>>> string.atoi('80', base=8)
64
>>> string.atoi('110', base=2)
6
>>> string.atoi('21', base=6)
13

string.capwords(s, sep=' ')
将字符串中开头和sep后面的字母变成大写

>>> string.capwords('this is a dog')
'This Is A Dog'
>>> string.capwords('this is a dog', sep=' ')
'This Is A Dog'
>>> string.capwords('this is a dog', sep='s')
'This is a dog'
>>> string.capwords('this is a dog', sep='o')
'This is a doG'

string.maketrans(s, r)
创建一个s到r的字典, 可以使用字符串对象的translate()方法来使用

>>> tsl_1 = string.maketrans('1234', 'abcd')
>>> tsl_2 = string.maketrans('4569', 'xyzt')
>>> s = '123456789'
>>> s.translate(tsl_1)
'abcd56789'
>>> s.translate(tsl_2)
'123xyz78t'
>>> tsl_1
{'1': 'a', '3': 'c', '2': 'b', '4': 'd'}
>>> tsl_2
{'5': 'y', '9': 't', '4': 'x', '6': 'z'}

列表对象的常用方法

列表的所有除魔法方法外的函数有: ['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
下面将逐一介绍它们:

  1. append()
    在列表的最后添加一个元素
>>> test = []
>>> test
[]
>>> test.append(6)
>>> test
[6]
>>> test.append('I love FishC!')
>>> test
[6, 'I love FishC!']
  1. clear()
    在不改变内存中位置的情况下清空列表
>>> raw = [1, 2, 3]
>>> same = raw
>>> raw
[1, 2, 3]
>>> same
[1, 2, 3]
>>> raw.clear()
>>> raw
[]
>>> same
[]

有人说: "何必那么复杂, 直接raw = []不就完事了吗?"
但是, 这是不同的, 测试:

>>> raw = [1, 2, 3]
>>> same = raw
>>> raw
[1, 2, 3]
>>> same
[1, 2, 3]
>>> raw = []
>>> raw
[]
>>> same
[1, 2, 3]
>>> id(raw) == id(same) # 检测它们在内存中在不在同一个地址
>>> False
  1. copy()
    浅拷贝(拓展内容见>>>这里<<<)
>>> raw = [1, 2, 3]
>>> same = raw
>>> different = raw.copy()
>>> raw
[1, 2, 3]
>>> same
[1, 2, 3]
>>> different
[1, 2, 3]
>>> raw.append(4)
>>> raw
[1, 2, 3, 4]
>>> same
[1, 2, 3, 4]
>>> different
[1, 2, 3]
>>> id(raw) == id(same)
True
>>> id(raw) == id(different)
False
  1. count()
    统计某一个元素在列表中的个数
>>> test = [1, 1, 2, 3, 1, 2]
>>> test.count(1)
3
>>> test.count(2)
2
>>> test.count(3)
1
  1. extend()
    将一个可迭代对象的每一项添加到列表的最后
>>> test = [1, 2, 3]
>>> test
[1, 2, 3]
>>> test.extend([11, 22, 33])
>>> test
[1, 2, 3, 11, 22, 33]
  1. index()
    返回某个元素在列表中的下标
>>> test = [3, 8, 4, 2, 1]
>>> test
[3, 8, 4, 2, 1]
>>> test.index(2)
3
>>> test.index(8)
1
>>> test.index(4)
2
  1. insert()
    将某个元素插在列表的某个位置
    形式: ???.insert(位置, 元素)
>>> test = [1, 1, 2, 3, 5, 8]
>>> test
[1, 1, 2, 3, 5, 8]
>>> test.insert(3, 10)
>>> test
[1, 1, 2, 10, 3, 5, 8]
>>> test.insert(5, 100)
>>> test
[1, 1, 2, 10, 3, 100, 5, 8]
  1. pop()
    删除列表中指定位置的元素并返回, 默认位置为-1(最后)
>>> test = [1, 1, 9, 3, 6, 8]
>>> test
[1, 1, 9, 3, 6, 8]
>>> test.pop()
8
>>> test
[1, 1, 9, 3, 6]
>>> test.pop(2)
9
>>> test
[1, 1, 3, 6]
  1. remove()
    移除列表中第一个指定的元素
>>> test = [1, 1, 2, 3, 4, 3]
>>> test
[1, 1, 2, 3, 4, 3]
>>> test.remove(1)
>>> test
[1, 2, 3, 4, 3]
>>> test.remove(3)
>>> test
[1, 2, 4, 3]
  1. reverse()
    在不改变内存中位置的情况下反转列表
>>> test = [1, 1, 2, 3, 5, 8]
>>> test
[1, 1, 2, 3, 5, 8]
>>> test.reverse()
>>> test
[8, 5, 3, 2, 1, 1]
  1. sort()
    给列表排序, 可选参数: reverse(从大到小), key(为列表中每一个值进行key的计算, 按返回值大小排序
>>> test1 = [8, 3, -9, 2, 5, 3]
>>> test1
[8, 3, -9, 2, 5, 3]
>>> test1.sort()
>>> test1
[-9, 2, 3, 3, 5, 8]
>>> test1.sort(reverse = True)
>>> test1
[8, 5, 3, 3  2, -9]
>>> test2 = ['z', 'abcde', 'cde']
>>> test2
['z', 'abc', 'cdeeee']
>>> test2.sort() # 默认按ASCII值大小排序
>>> test2
['abc', 'cdeeee', 'z']
>>> test2.sort(key = len) # 要求按长度排序
>>> test2
['z', 'abc', 'cdeeee']

random模块

random模块有以下常用的函数: ['random', 'uniform', 'randint', 'choice', 'sample', 'randrange', 'shuffle']

#########################

首先你要了解……

x = [1, 10] 代表 1 <= x <= 10
x = [1, 10) 代表 1 <= x < 10
x = (1, 10] 代表 1 < x <= 10
x = (1, 10) 代表 1 < x < 10

  1. random()
    随机生成一个 [0, 1) 的浮点数
>>> import random
>>> random.random()
0.5081351950612368

2.uniform(a, b)
随机生成一个 [a, b] 的浮点数

>>> import random
>>> random.uniform(10, 20)
19.44935373514052
>>> random.uniform(20, 10)
16.220864603020107
  1. randint(a, b)
    随机生成一个 [a, b] 的整数, a必须大于等于b
>>> import random
>>> random.randint(0, 9)
9
>>> random.randint(0, 9)
7
  1. choice(seq)
    seq为可迭代对象, 从中抽取一项
>>> import random
>>> seq = ['i', 'love', 'fishc']
>>> random.choice(seq)
'i'
>>> random.choice(seq)
'fishc'
  1. sample(population, k)
    population为可迭代对象, 从中抽取k项, 0 <= k <= len(population)
>>> import random
>>> population = [1, 2, 3, 4, 5]
>>> random.sample(population, 2)
[1, 3]
>>> random.sample(population, 3)
[1, 2, 5]
  1. randrange(start[, stop[, step]])
    相当于random.choice(range(start[, stop[, step]]))
>>> import random
>>> random.randrange(0, 100, 25)
25
>>> random.randrange(0, 100, 25)
75
  1. shuffle(x)
    在不改变内存中位置的情况下打乱x
>>> import random
>>> x = [1, 2, 3, 4, 5]
>>> random.shuffle(x)
>>> x
[3, 1, 2, 4, 5]

copy模块

这个模块有两个函数, copy和deepcopy:

  1. copy.copy (浅拷贝)只拷贝父对象,不会拷贝对象的内部的子对象。
  2. copy.deepcopy (深拷贝) 拷贝对象及其子对象。也就是说, 如果列表里还有列表, deepcopy也会将其拷贝, 但是copy做不到这一点

看了上面的解释, 大家可能看得云里雾里, 这里有一个很好的例子:

import copy

a = [1, 2, 3, 4, ['a', 'b']]  #原始列表
print('原始列表 =', a)

b = a  # 把a赋值给b
c = copy.copy(a)  # 浅拷贝a, 等效于a[:]
d = copy.deepcopy(a)  # 深拷贝a

a.append(5)  # 修改对象a
a[4].append('c')  # 修改对象a中的列表['a', 'b']

print('修改后的原始列表 =', a)
print('赋值 =', b)
print('浅拷贝 =', c)
print('深拷贝 =', d)

原始列表 = [1, 2, 3, 4, ['a', 'b']]
修改后的原始列表 =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
赋值 =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
浅拷贝 =  [1, 2, 3, 4, ['a', 'b', 'c']]
深拷贝 =  [1, 2, 3, 4, ['a', 'b']

else的多种语法

  1. if…else
    最常用的条件判断语句, 如果不符合if里的条件, 执行else里的内容
i = input('请输入一个数: ')
if i == '8':
    print('Yes!')
else:
    print('No!')
  1. if…elif…else
    常用的条件判断语句, elif 相当于 else if
i = input('请输入一个数: ')
if i == '5':
    print('输入了5')
elif i == '8':
    print('输入了8')
else:
    print('输入的不是5或8')
  1. for...else
    如果for循环结束, 且没有执行break, 执行else里的内容
for i in range(10):
    print(i)
    if i == 4:
        print('执行break')
        break
else:
    print('经过else')

for j in range(10):
    print(j)
    if j == 123:
        print('执行break')
        break
else:
    print('经过else')
  1. while…else
    如果不符合while的条件, 且没有执行break, 执行else里的内容
i = 0
while i <= 99:
    print(i)
    if i == 999:
        print('执行break')
        break
else:
    print('经过else')

j = 0
while j <= 99:
    print(i)
    if i == 90:
        print('执行break')
        break
else:
    print('经过else')
  1. try…except…else
    如果try里的语句出错, 执行except里的内容, 否则执行else里的内容
try:
    a = 我爱鱼C
except:
    print('执行except')
else:
    print('执行else')

try:
    a = '我爱鱼C'
except:
    print('执行except')
else:
    print('执行else')

字典对象的常用方法

字典对象的所有除魔法方法外的函数有: ['clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

#########################

  1. clear()
    清空字典
>>> test = {1: 'i', 2: 'love', 3: 'fishc'}
>>> test
{1: 'i', 2: 'love', 3: 'fishc'}
>>> test.clear()
>>> test
{}
  1. copy()
    复制字典
>>> raw = {1: 'i', 2: 'love', 3: 'fishc'}
>>> same = raw.copy()
>>> raw
{1: 'i', 2: 'love', 3: 'fishc'}
>>> same
{1: 'i', 2: 'love', 3: 'fishc'}
>>> id(same) == id(raw)
False
  1. fromkeys(iterable, value)
    返回一个字典, 键为iterable里的每一项, 值为value, 等效于 {i: value for i in iterable}
>>> {}.fromkeys(range(1, 33), 'Excellent')
{1: 'Excellent', 2: 'Excellent', 3: 'Excellent', 4: 'Excellent', 5: 'Excellent', 6: 'Excellent', 7: 'Excellent', 8: 'Excellent', 9: 'Excellent', 10: 'Excellent', 11: 'Excellent', 12: 'Excellent', 13: 'Excellent', 14: 'Excellent', 15: 'Excellent', 16: 'Excellent', 17: 'Excellent', 18: 'Excellent', 19: 'Excellent', 20: 'Excellent', 21: 'Excellent', 22: 'Excellent', 23: 'Excellent', 24: 'Excellent', 25: 'Excellent', 26: 'Excellent', 27: 'Excellent', 28: 'Excellent', 29: 'Excellent', 30: 'Excellent', 31: 'Excellent', 32: 'Excellent'}
  1. get(k[, d])
    返回字典中键k对应的值, 如果字典中没有键k, 则返回d
>>> test = {1: 'i', 2: 'love', 3: 'fishc'}
>>> test.get(3, 'key不存在!)
'fishc'
>>> test.get('ddd', 'key不存在!)
'key不存在!'
  1. keys(), values(), items()
    keys()返回字典中所有键的列表
    values()返回字典所有值的列表
    items()返回字典(键, 值)的列表
>>> test = {'aac': ('777', 6), 66: 'love', 45: 765, 'hh': 'fishc'}
>>> test.keys()
dict_keys(['aac', 66, 45, 'hh'])
>>> test.values()
dict_values([('777', 6), 'love', 765, 'fishc'])
>>> dict.items()
dict_items([('aac', ('777', 6)), (66, 'love'), (45, 765), ('hh', 'fishc')])
  1. pop(k[, d])
    返回字典中k对应的值, 并删除, 不存在就返回d
>>> test = {1: 'i', 2: 'love', 3: 'fishc'}
>>> test
{1: 'i', 2: 'love', 3: 'fishc'}
>>> test.pop(1, '不存在!')
'i'
>>> test
{2: 'love', 3: 'fishc'}
>>> test.pop(1, '不存在!')
'不存在!'
>>> test
{2: 'love', 3: 'fishc'}
  1. popitem()
    返回字典中的第一项(默认顺序), 并从字典中删除
>>> test = {1: 'i', 2: 'love', 3: 'fishc'}
>>> test.popitem()
(1, 'i')
>>> test
{2: 'love', 3: 'fishc'}
  1. setdefault(k[, d])
    如果键在字典中, 返回这个键所对应的值
    如果键不在字典中, 向字典中加入这个键, 以d为这个键的值, 并返回d
>>> test = {2: 'love', 3: 'fishc'}
>>> test
{2: 'love', 3: 'fishc'}
>>> test.setdefault(2, '!!!!!')
'love'
>>> test
{2: 'love', 3: 'fishc'}
>>> test.setdefault(1, 'i')
'i'
>>> test
{1, 'i', 2: 'love', 3: 'fishc'}
  1. update
    将新字典添加到原字典
>>> raw = {1: 'i', 4: 'com'}
>>> add = {2: 'love', 3: 'fishc'}
>>> raw
{1: 'i', 4: '.com'}
>>> raw.update(add)
>>> raw
{1: 'i', 2: 'love', 3: 'fishc', 4: '.com'}