Python中序列类型的方法

前言

子曰:“温故而知新,可以为师矣。”–<<论语>>
Ubuntu1804 + Python3.6.6


列表的方法

list增加性质?

list具有增加性质的方法有那些呢?

  • append
  • insert
  • extend
list的append方法
>>> a = []
>>> a
[]
>>> a.append(1)
>>> a.append('a')
>>> a.append([1, 2, 3])
>>> a.append(' ')
>>> a
[1, 'a', [1, 2, 3], ' ']

通过实际操作, 我们定义了空列表a[].

并使用append方法, 追加了 4 个元素对象.

append方法, 它接收一个对象, 将该对象追加到列表末尾.

list的insert方法
>>> a
[1, 'a', [1, 2, 3], ' ']
>>> a.insert(1, '这是我插入的值')
>>> a
[1, '这是我插入的值', 'a', [1, 2, 3], ' ']

看这里, 我们传入了两个参数对象.

第一个是索引值即我们想要插入的位置, 第二个是我们想要插入的对象.

insert方法, 它接收索引值和对象, 将对象插入到传入的索引值的位置.


list的extend方法
>>> a = [1, 2, 3]
>>> a.extend([4, 5, 6])
>>> a
[1, 2, 3, 4, 5, 6]
>>> a.extend(('a', 'b', 'c'))
>>> a
[1, 2, 3, 4, 5, 6, 'a', 'b', 'c']

可以看出, 我们传入了一个[4, 5, 6]的列表对象, 查看a发现参数中的元素都添加到列表a中.

extend方法, 它接收一个可迭代对象(通常是序列类型), 将该对象中的元素添加到列表末尾.


list删除性质?

list具有删除性质的方法有那些呢?

  • remove
  • pop
  • clear
list的remove方法
>>> a
[1, 2, 3, 'a', 's', 'd', 7, 4, 4]
>>> a.remove(1)
>>> a
[2, 3, 'a', 's', 'd', 7, 4, 4]
>>> a.remove('a')
>>> a
[2, 3, 's', 'd', 7, 4, 4]
>>> a.remove(4)
>>> a
[2, 3, 's', 'd', 7, 4]

通过实际操作, 我们给remove传入一个1后, 发现原列表中的1被删除了.

同样我们传入参数a, 也这样, 传入4也是这样.

4却有点不同, 因为原列表有两个4, 使用remove后发现, 还有个4存在.

为什么呢? 因为remove一次只会删除一个元素对象.

remove方法, 它接收一个对象, 并在列表中从左至右地查找这个对象, 如果找到, 就删除找到的第一个元素.

如果没找到呢? 比如我们传入一个列表中本不存在的值?

很简单, 会报一个ValueError: list.remove(x): x not in list的错误.


list的pop方法
>>> a
[2, 3, 's', 'd', 7, 4]
>>> a.pop(1)
3
>>> a
[2, 's', 'd', 7, 4]
>>> a.pop(2)
'd'
>>> a.pop()
4
>>> a
[2, 's', 7]
>>> a.pop()
7
>>> a
[2, 's']

通过实际操作, 我们是不是可以看出一些东西啊.

我们传入参数1, 发现返回了一个3, 并且列表中的元素3也没有了.

我们不传参数, 发现返回了一个4, 并且处于列表末尾的4也没有了.

pop方法, 它在接收参数的情况下, 接收一个索引值参数, 然后**弹出(或删除)**列表中该索引位置的元素, 并返回给我们弹出(或删除)的值.

它在不接收参数的情况下, 默认弹出(或删除)列表中最末尾的元素, 并返回给我们弹出(或删除)的值.


list的clear方法
>>> a
[2, 's']
>>> a.clear()
>>> a
[]

clear方法很简单, 通过实际行动和方法名, 我们就能猜到功能了.

clear方法, 它会清除列表中的所有元素.


list修改性质?

索引赋值的方式
>>> a
[1, 2, 'asda', ' ', 55]
>>> a[2] = 'hah'
>>> a
[1, 2, 'hah', ' ', 55]

列表的修改很简单, 就是使用索引赋值的方式修改.


list查询性质?

list具有删除性质的方法有那些呢?

  • count
  • index
list的count方法
>>> a
[1, 2, 4, 6, 6, 3, 4, 4]
>>> a.count(1)
1
>>> a.count(4)
3

count方法, 它接收一个对象, 然后在列表中寻找该对象, 返回该对象在列表中出现的次数.


list的index方法
>>> a
[1, 2, 4, 6, 6, 3, 4, 4]
>>> a.index(6)
3
>>> a.index(2)
1
>>> a.index(4)
2

index方法, 它接受一个对象, 然后在列表中从左至右查找该对象, 如果找到就返回找到的第一个元素的索引.

可以看这里的例子, 我们传入4, 那么index会在列表中找4, 从左至右找到的第一个4就是索引为2的元素.


list列表复制

>>> a
[1, 2, 3]
>>> b = a.copy()
>>> b
[1, 2, 3]

可以看出, 我们把a的列表copy给了b.

copy方法, 它会复制对象列表, 然后返回复制后的列表.


list中排序

  • sort
  • reverse
list的sort方法
>>> a
[12, 3, 5, 7, 8, 3, 6]
>>> a.sort()
>>> a
[3, 3, 5, 6, 7, 8, 12]
>>> a.append('asda')
>>> a.sort()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'int'
>>> a.sort(key=str)
>>> a
[12, 3, 3, 5, 6, 7, 8, 'asda']

sort方法, 它把列表中的每个元素根据ascii码表来进行从小到大的排序.

但是这个列表有点特殊, 因为都是数字.

可以看到我们append一个字符串到列表后, 使用sort就报错.

那是不是就没办法有字符串元素的列表的呢?

还是可以的, 我们传入参数ket=str.

这样sort会把列表中的每个元素都当作字符串, 并取字符串第一个元素的ascii码表上的值来进行从小到大的排序.


list的reverse方法
>>> a
[2, 1, 5, 2, 1, 88]
>>> a.reverse()
>>> a
[88, 1, 2, 5, 1, 2]

准确来说**reverse方法不是排序**, 应该是改变列表中元素的排列方法.

从例子中我们就能看出, reverse只是改变了列表中元素的排列方式.

reverse方法, 它会将列表中的元素方向存放.

reverse的英文意思是 反向的意思.


元祖的方法

  • count
  • index

元祖的count, index方法使用和列表的相同.


字符串的方法

方法分类

由于字符串的方法有很多, 在这里就先把有常用的方法归类.

  • count: 和列表的方法类似, 不再讲解.
  • index: 和列表的方法类似, 不再讲解.

字符串增加

>>> '123123' + 'asdasda'
'123123asdasda'
>>> 'asd' * 10
'asdasdasdasdasdasdasdasdasdasd'

我们可以通过+*的方式来增加字符串.


字符串方法大全

str的capitalize方法
>>> a
"i'm is good man."
>>> a.capitalize()
"I'm is good man."
>>> a
" i'm is good man."
>>> a.capitalize()
" i'm is good man."

通过使用该方法, 让我们的字符串首字符的字母发生了改变, 变成了大写.

但是如果字符串的首字符不是字母的, 那么返回的字符串和原字符串相同.

方法, 它会把字符串的首字符进行大写转换, 如果首字符不是字母则不发生改变, 如果是就将小写字母转为大写, 第一个字符后面的其他字母进行小写转换.


str的casefold方法
>>> a
'ASDAS TRUE FALSE ASD'
>>> a.casefold()
'asdas true false asd'
>>> a
'ß'
>>> a.casefold()
'ss'

casefold方法: 返回一个 将原字符串中的所有大写字符转换为小写字符 的字符串.

这里的功能和lower方法相似但是有区别.

lower方法只对ASCII码中的大写字母字符有效.

如果需要处理其他的语言的大写字母就需要使用casefold方法.

我们令a为德语的大写字母, 然后再转小写.


str的center方法
>>> a
'ß'
>>> a.center(20)
'         ß          '
>>> a.center(10)
'    ß     '
>>> a.center(10, 'p')
'ppppßppppp'

center方法: 它接收一个参数时, 将扩充字符串为指定宽度, 并将原字符串置于宽度的二分之一处.

它接受两个参数时, 同样扩充指定宽度, 并把扩充的地方换成指定字符.

根据实际例子来看会好理解.


str的encode方法
>>> a
'hello world'
>>> a.encode(encoding='utf-8')
b'hello world'

encode方法: 它接收一个编码参数, 并根据该编码将数据编码为bytes类型的数据.


str的endswith方法
>>> a = 'aasdasdasazdcvadasd'
>>> a.endswith('asd')
True

endswith: 比较字符串结尾部分字符与指定字符是否相等,是返回True,否返回False.


str的startswith方法
>>> a
'aasdasdasazdcvadasd'
>>> a.startswith('aas')
True
>>> a.startswith('asd')
False

startswith: 比较字符串开始部分字符与指定字符是否相等,是返回True,否返回False.


str的find方法
>>> a
'aasdasdasazdcvadasd'
>>> a.find('asdasd')
1

find: 在字符串中查询指定对象, 从左至右一旦找到就返回对应位置的索引.


str的isdigit方法
>>> a
'aasdasdasazdcvadasd'
>>> a.isdigit()
False
>>> a = '12312312'
>>> a.isdigit()
True

isdigit: 如果对象中全是数字字符就返回True,否就返回False.


str的isalpha方法
>>> a
'12312312'
>>> a.isalpha()
False
>>> a = 'asdaszxcasdqw'
>>> a.isalpha()
True

isalpha: 如果对象中全是字母字符就返回True,否就返回False.


str的islower方法
>>> a = 'asdasd;,;,,m '
>>> a.islower()
True
>>> a = 'asdasd;,;,,M '
>>> a.islower()
False

islower: 检查字符串中的字母是否全为小写,是就返回True,否就返回False.


str的isupper方法
>>> a = 'ADSD,.;  ,;'
>>> a.isupper()
True
>>> a = 'asDHJBJ::'
>>> a.isupper()
False

isupper: 检查字符串中的字母是否全为大写,是就返回True,否就返回False.


str的lower方法
>>> a
'asDHJBJ::'
>>> a.lower()
'asdhjbj::'

lower: 返回一个将字符串中的字母都转换为小写的副本.


str的upper方法
>>> a
'aaJHBHJ,; ;, '
>>> a.upper()
'AAJHBHJ,; ;, '

upper: 返回一个将字符串中的字母都转换为大写的副本.


str的expandtabs方法
>>> a = '\tasdasdas\tasdasd'
>>> a.expandtabs(tabsize=4)
'    asdasdas    asdasd'

expandtabs: 把字符串中的\t转换为空格, 默认tabsize=8.

这里设置tabsize4即把字符串中的\t转换为4个空格.


str的isalnum方法
>>> a = 'asdas1651651..'
>>> a.isalnum()
False
>>> a = 'asdasSDS1651651'
>>> a.isalnum()
True

isalnum: 如果字符串中的元素没有一个不是字母或数字就返回True, 否则False.


str的isdecimal方法
>>> a = 'asdasSDS'
>>> a.isdecimal()
False
>>> a = '1651561651651'
>>> a.isdecimal()
True

isdecimal: 检查字符串是否只包含十进制字符. 并且只应用于unicode对象.

如果对象字符串不是unicode编码对象, 需要在字符串前加上u'', 使其为unicode编码对象.


str的isidentifier方法
>>> a = ' test1'
>>> b = 'test1'
>>> c = '_Test1'
>>> d = '哈哈'
>>> a.isidentifier()
False
>>> b.isidentifier()
True
>>> c.isidentifier()
True
>>> d.isidentifier()
True

isidentifier: 实际上就是把字符串的内容当作变量名来判断, 判断字符串的内容是否符合变量命名规则.


str的isnumeric方法
>>> a = '516516156'
>>> a.isnumeric()
True

isnumeric: 方法检测字符串是否只由数字组成. 并且该方法是只针对unicode对象.


str的isprintable方法
>>> a = 'asdaskajsd ;,;ads '
>>> a.isprintable()
True
>>> a = 'asdaskajsd \n;,;ads '
>>> a.isprintable()
False

isprintable: 判断字符串所包含的字符是否全部可打印. 字符串包含不可打印字符, 如转义字符, 将返回False.


str的isspace方法
>>> a = '  asda   '
>>> a.isspace()
False
>>> a = '     '
>>> a.isspace()
True
>>> a = ''
>>> a.isspace()
False

isapace: 如果字符串的内容只有空格(whitespace), 就返回True, 否则False.


str的istitle方法
>>> a = 'hello Wro ;.'
>>> a.istitle()
False
>>> a = 'Hello Wro ;.'
>>> a.istitle()
True

istitle: 检测字符串中所有的单词拼写首字母是否为大写, 且其他字母为小写, 返回bool值.


str的title方法
>>> a = 'Hello world'
>>> a.title()
'Hello World'
>>> a = 'wello world asd asasdasd ;,;,;'
>>> a.title()
'Wello World Asd Asasdasd ;,;,;'

title: 返回把字符串中的单词首字母大写的字符串对象.


str的ljust方法
>>> a
'asdkjasbkjd'
>>> a.ljust(20)
'asdkjasbkjd         '
>>> a.ljust(20, 'p')
'asdkjasbkjdppppppppp'

ljust: 方法返回一个原字符串左对齐, 并使用空格填充至指定长度的新字符串.

该方法接收一个参数, 用来指定字符串的长度, 默认使用空格填充.

如果接收两个参数, 第二个参数指定填充的字符.

rjust和这个很类似, 字符串向右对齐.


str的strip方法
>>> a = 'asdasd   '
>>> a.strip()
'asdasd'
>>> a = '       asdasd   '
>>> a.strip()
'asdasd'

strip: 去除字符串开头(左)和结尾(右)的空格或传入的参数字符.

lstriprstrip分别表示去除左边或右边的字符.


str的maketrans方法
>>> a = 'abcde'
>>> b = '12345'
>>> c = ''
>>> c.maketrans(a, b)
{97: 49, 98: 50, 99: 51, 100: 52, 101: 53}

maketrans: 生成一个字典, key为a字符串中的每个元素的ASCII的对应的值, value同理.

两个参数长度需要相等.


str的parttion方法
>>> a = 'www.baidu.com'
>>> a.partition('.')
('www', '.', 'baidu.com')

parttion: 根据指定的分隔符, 返回分割后的元祖.

从左至右, 只分割一次.

rpartition表示从右至左.


str的replace方法
>>> a
'www.baidu.com'
>>> a.replace('www', 'aaa')
'aaa.baidu.com'

replace: 接收两个参数, 第一个参数表示需要被替换的元素, 第二参数表示替换的元素.


str的split方法
>>> a = 'www baidu com'
>>> a.split()
['www', 'baidu', 'com']
>>> a.split('i')
['www ba', 'du com']
>>> a.split('w', 2)
['', '', 'w baidu com']

split: 接收或者不接收参数. split用来分割字符串, 返回列表.

不接收参数, 默认以空格来作为分割的标准, 将分割后的字符串对象存入列表中并返回.

接收一个参数, 该参数表示为分割的标准即字符, 将分割后的字符串对象存入列表中并返回.

接收两个参数, 第一个参数表示分割的标准, 第二个参数表示分割几次, 将分割后的字符串对象存入列表中并返回.

rsplit表示从右至左分割.


str的splitlines方法
>>> a
'hello\r\nworld\n!\n'
>>> a.splitlines(1)
['hello\r\n', 'world\n', '!\n']
>>> a.splitlines(0)
['hello', 'world', '!']
>>> a.splitlines()
['hello', 'world', '!']

splitlines简直是神器.

splitlines: 用来去除字符串中的\r, \n, \r\n并返回一个列表.

可以接收一个参数, 参数为真就保留字符串中的换行转义字符.

如果参数为假或者不给参数, 那么就会去除字符串中的换行转义字符.


str的swapcase方法
>>> a = 'AAaa bbBB ;;;,,,  asdasd'
>>> a.swapcase()
'aaAA BBbb ;;;,,,  ASDASD

swapcase: 将字符串中的字母进行大小写互转.


str的translate方法
>>> a = 'abcde'
>>> b = '12345'
>>> c = 'asda12'
>>> d = c.maketrans(a, b)
>>> d
{97: 49, 98: 50, 99: 51, 100: 52, 101: 53}
>>> c.translate(d)
'1s4112'

translate: 根据提供的table也就是翻译表, 对字符串中的元素进行转换.

翻译表, 也就是能显示出一些对应关系的表.

一般我们使用字符串中方法即maketrans来自定义创建翻译表.

我们把maketrans返回的对象传入到translate中即可.

这里我们将abcde字符对应着12345.

so, the result, you know.


str的zfill方法
>>> a
'abcde'
>>> a.zfill(10)
'00000abcde'

zfill: 返回指定长度的字符串,原字符串右对齐,前面填充0.


str的join方法
>>> ''.join('123456')
'123456'
>>> ' '.join('123456')
'1 2 3 4 5 6'
>>> 'a'.join('123456')
'1a2a3a4a5a6'
>>> ' '.join(('1', '2', '3'))
'1 2 3'

join: 将序列中的元素以指定的字符连接成一个新的字符串.
如果参数不是字符串序列, 那么序列中的元素必须为字符串类型的.


str的format方法
>>> a = '你好啊! {}'
>>> a.format('Dr.Lee')
'你好啊! Dr.Lee'

format: 用于格式化字符串.
format的使用形式很多, 很灵活这里就不过多讲解.
在Python3.6中也有新特性f'asdasd{变量名}', 来格式化输出字符串.