python生成序列_Python常见序列详解

一、Python中序列的分类

常见序列类型包括字符串(普通字符串和unicode字符串),列表和元组.所谓序列,即成员有序排列,可通过下标访问.

二、Python序列通用操作

下面我们将分别以字符串、列表和元组为例来说明对序列的操作

索引

序列中的元素都是有序的、拥有自己编号(从0开始),我们可以通过索引得到序列中对应的元素:

索引也可以为负值,负数索引表示从右往左开始计数,最后一个元素索引为-1,倒数第二为-2,以此类推.

>>> s = 'abcdefg'

>>>s[0]'a'

>>> s[1]'b'

>>> s[-1]'g'

>>>

>>> l = [1,2,3,4,5,6,7]>>> l[4]5

>>>l[0]1

>>> l[-1]7

>>>

>>> t = (1,2,3,4,5,6,7)>>>t[0]1

>>> t[-1]7

>>> t[4]5

>>> s[::-1]

'gfedcba'

2. 切片(分片)

使用索引可以获取单个元素,使用分片可以获取序列中指定范围内的元素.切片操作符[:]/[::]

obj[start_index:end_index] 表示获取从start_index开始到end_index-1结束所有索引对应的元素

切片中冒号左边索引对应的元素晚于右边索引对应元素出现时,返回结果是[]

>>>l

[1, 2, 3, 4, 5, 6, 7]>>>

>>> l[0:5]

[1, 2, 3, 4, 5]>>> l[4:6]

[5, 6]

>>> l[2:2]

[]

>>> l[-3:-1]

[5, 6]

>>> l[-1:-3]

[]

obj[:end_index] 表示获取从0开始到end_index-1结束所有索引对应的元素

obj[start_index:] 表示获取start_index对应的元素以及后面所有的元素

obj[:] 表示获取所有的元素

>>> l[:5]

[1, 2, 3, 4, 5]>>> l[2:]

[3, 4, 5, 6, 7]

>>> l[-2:]

[6, 7]

>>> l[:-3]

[1, 2, 3, 4]

>>> l[:]

[1,2,3,4,5,6,7]

>>> s[:5]

'abcde'

>>> s[1:]

'bcdefg'>>> s[1::2]

'bdf'

[start_index:end_index:step] (step>0)表示从start_index索引对应的元素开始每step个元素取出来一个,直到取到end_index对应的元素结束(step默认为1)

>>> ll[0:9:]

[1, 2, 3, 4, 5, 6, 7, 8, 9]>>> ll[0:9:1]

[1, 2, 3, 4, 5, 6, 7, 8, 9]>>> ll[0:9:2]

[1, 3, 5, 7, 9]>>> ll[::4]

[1, 5, 9]

>>> s[::-2]

'geca'

>>>

[start_index:end_index:step] (step<0)表示从右到左反向提取元素,即从start_index索引对应的元素开始反向每step个元素取出来一个,直到取到end_index+1对应的元素结束.

此时start_index对应的元素要晚于end_index对应的元素出现,否则返回[]

>>> ll[0:6:-2]

[]

>>> ll[9:6:-2]

[10, 8]>>> ll[6:9:-2]

[]>>> ll[::-1]

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]>>> ll[:2:-3]

[10, 7, 4]>>> ll[9:2:-1]

[10, 9, 8, 7, 6, 5, 4]

2. 加法

两种相同的序列才可以进行加法操作

>>> l1=[1,2,4]>>> l2=[4,5,6]>>> l3=['9','10']>>> l1+l2

[1, 2, 4, 4, 5, 6]>>> l1+l3

[1, 2, 4, '9', '10']>>> l1+'abcdefg'Traceback (most recent call last):

File"", line 1, in TypeError: can only concatenate list (not "str") to list

3.乘法

>>> 'python'*2

'pythonpython'

>>> [1,2,3,4,5]*2[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]>>> ('a','b')*2('a', 'b', 'a', 'b')>>>

4.成员资格

>>>s'abcdefg'

>>>t

(1, 2, 3, 4, 5, 6, 7)>>>l

[1, 2, 3, 4, 5, 6, 7]>>>

>>>

>>> if 'ab' in s and 'c' ins:

...print 'yes'...else:

...print 'no'...

yes>>> if 5 in l and 6 int:

...print 'yes'...else:

...print 'no'...

yes>>>

>>> if 10 inl:

...print 'yes'...else:

...print 'no'...

no

>>> 10 in t

False

>>> 3 in t

True

>>> 'a' in s

True

4.最大值、最小值、长度

>>>len(s)7

>>>len(l)7

>>>len(t)7

>>>max(s)'g'

>>>max(l)7

>>>max(t)7

>>>min(s)'a'

>>>min(l)1

>>>min(t)1

三、列表(list)

列表和字符串、元组最大的区别为列表可变,字符串和元祖不可变

1.list函数 创建列表

>>> s

'abcdefg'

>>> t

(1, 2, 3, 4, 5, 6, 7)

>>>list(s)

['a', 'b', 'c', 'd', 'e', 'f', 'g']>>>list(t)

[1, 2, 3, 4, 5, 6, 7]

2.通过赋值改变列表

>>>l

[1, 2, 3, 4, 5, 6, 7]>>>

>>> l[1], l[2] = 10, 100

>>>l

[1, 10, 100, 4, 5, 6, 7]

3.删除列表元素

>>>l

[1, 2, 3, 4, 5, 6, 7]>>>

>>> l[1], l[2] = 10, 100

>>>l

[1, 10, 100, 4, 5, 6, 7]>>>

>>> dell[0]>>>l

[10, 100, 4, 5, 6, 7]>>> del l[3:]>>>l

[10, 100, 4]

4.列表分片赋值

#赋值

>>> l=range(10)>>>l

[0,1, 2, 3, 4, 5, 6, 7, 8, 9]>>> l[:3] = 'abcdefg'

>>>l

['a', 'b', 'c', 'd', 'e', 'f', 'g', 3, 4, 5, 6, 7, 8, 9]>>> l[:7] = 'xy'

>>>l

['x', 'y', 3, 4, 5, 6, 7, 8, 9]>>>

>>> l=range(10)

>>> l

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> l[:3] = ['x','yy']

>>> l

['x', 'yy', 3, 4, 5, 6, 7, 8, 9]

>>>

#插入

>>> l=range(10)

>>> l

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> l[2:2]=[u'在第三个元素插入']

>>> l

[0, 1, u'\u5728\u7b2c\u4e09\u4e2a\u5143\u7d20\u63d2\u5165', 2, 3, 4, 5, 6, 7, 8, 9]

>>>

#删除

>>> l=range(10)

>>> l

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> l[1:4] = ''  #等价于del l[1:4]

>>> l

[0, 4, 5, 6, 7, 8, 9]

>>> l=range(10)

>>> l

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> l[1:4] = []

>>> l

[0, 4, 5, 6, 7, 8, 9]

>>>

5.列表方法

append 在列表尾部增加元素

>>> l=[1,2,3,4]>>> l.append(5)>>> l.append(['acb'])>>>l

[1, 2, 3, 4, 5, ['acb']]

count统计元素出现的个数

>>>l

[1, 2, 3, 2, 12, 3, 53, 1, 2]>>> for i inl:

...print i,'-->',l.count(i)

...1 --> 2

2 --> 3

3 --> 2

2 --> 3

12 --> 1

3 --> 2

53 --> 1

1 --> 2

2 --> 3

#元祖乱入----->

>>> t

(1, 2, 3, 4)

>>> for i in t:

... print i,'-->',t.count(i)

...

1 --> 1

2 --> 1

3 --> 1

4 --> 1

extend扩展原有列表

貌似列表的加法也可以"扩展列表"实际上"+"只是生成了一个新的列表,被连接的两个列表均没有改变,extend体现了列表的可变性

>>> l=range(5)>>>l

[0,1, 2, 3, 4]>>> l_add = [5,6,7,8]>>>l.extend(l_add)>>>l

[0,1, 2, 3, 4, 5, 6, 7, 8]>>>

>>> l+l_add

[0,1, 2, 3, 4, 5, 6, 7, 8, 5, 6, 7, 8]>>>l

[0,1, 2, 3, 4, 5, 6, 7, 8]

index找出某一元素第一次出现位置的索引

>>>l

[0,1, 2, 3, 4, 5, 6, 7, 8]>>> l.index(3)3

>>> l=[1,2,1,2,2,1]>>> l.index(2)1

insert(index,obj)将obj插入列表index索引前面

>>>l

[1, 2, 1, 2, 2, 1]>>> l.insert(0,'first')>>>l

['first', 1, 2, 1, 2, 2, 1]>>> l.insert(-1,'end')>>>l

['first', 1, 2, 1, 2, 2, 'end', 1]>>> l.insert(3,'cc')>>>l

['first', 1, 2, 'cc', 1, 2, 2, 'end', 1]>>>

pop(index)移除列表中index索引对应的元素,默认inex=-1

>>>l

['first', 1, 2, 'cc', 1, 2, 2, 'end', 1]>>>l.pop()1

>>>l

['first', 1, 2, 'cc', 1, 2, 2, 'end']>>> l.pop(2)2

>>>l

['first', 1, 'cc', 1, 2, 2, 'end']

rmove(obj)移除列表中匹配到obj的第一个元素

>>> l

['first', 1, 'cc', 1, 2,

>>> l.remove(1)>>>l

['first', 'cc', 1, 2, 2]

reverse转置列表

>>>l

['first', 'cc', 1, 2, 2]>>>l.reverse()>>>l

[2, 2, 1, 'cc', 'first']

sort给列表排序

>>>l

[2, 2, 1, 'cc', 'first']>>>l.sort()>>>l

[1, 2, 2, 'cc', 'first']

>>> l.reverse()

>>> l

['first', 'cc', 2, 2, 1]

>>> sorted(l)

[1, 2, 2, 'cc', 'first']

>>> l

['first', 'cc', 2, 2, 1]

>>>

四、元组(tuple)

不可变序列

1.创建元组

>>> t1=(1,2,3)>>> t2=1,2,3,>>> t3='a',>>>t1

(1, 2, 3)>>>t2

(1, 2, 3)>>>t3

('a',)#创建有一个元素的元组必须有逗号

>>> single_tuple=(2)

>>> single_tuple

2

>>> single_tuple=(2,)

>>> single_tuple

(2,)

>>>

2.touple函数

>>> tuple([1,2,3])

(1, 2, 3)>>> tuple('abc')

('a', 'b', 'c')>>> tuple((1,2,3))

(1, 2, 3)

3.元组方法

count

index

五、字符串(不可变序列)

1.字符换基本操作

参见上面有关序列的操作.

2.格式化字符串

>>> print 'price:%s'%123price:123

>>> print u'宽度示例:%f'%3.145926宽度示例:3.145926

>>> print u'宽度精度示例:%16.2f'%3.145926字段宽度和精度:3.14

>>> print u'0可以填充不足位数:%16.2f'%3.1459260可以填充不足位数:3.14

>>> print u'0可以填充不足位数:%016.2f'%3.14159260可以填充不足位数:0000000000003.14

>>> print u'-表示左对齐:%10.2f'%3.1415926

-表示左对齐: 3.14

>>>

>>> print u'-表示左对齐:%-10.2f'%3.1415926

-表示左对齐:3.14

>>> print u'空格表示正数前面加空格:% d'%-10+'\n'+u'空格表示正数前面加空格:% d'%5空格表示正数前面加空格:-10空格表示正数前面加空格:5

>>> print u'空格表示正数前面加空格:%d'%-10+'\n'+u'空格表示正数前面加空格:%d'%5空格表示整数前面加空格:-10空格表示整数前面加空格:5

>>> print u'+表示无论正负都带着正负号:%+d'%-10+'\n'+u'+表示无论正负都带着正负号:%+d'%5

+表示无论正负都带着正负号:-10

+表示无论正负都带着正负号:+5

>>> print u'+表示无论正负都带着正负号:%+d'%-10+'\n'+u'+表示无论正负都带着正负号:%+d'%5

+表示无论正负都带着正负号:-10

+表示无论正负都带着正负号:+5

3.常用字符串方法

string.capitalize()

把字符串的第一个字符大写,其他小写

>>> s

'aJJKbcefzxwu'

>>> s.capitalize()

'Ajjkbcefzxwu'

string.center(width)

返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

>>> s.center(20)

' aJJKbcefzxwu '

string.count(str, beg=0, end=len(string))

返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

>>> s.count('J')

2

string.decode(encoding='UTF-8', errors='strict')

以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除 非 errors 指 定 的 是'ignore' 或 者'replace'string.encode(encoding='UTF-8', errors='strict')

以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'string.endswith(obj, beg=0, end=len(string))

检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.

>>> s.endswith('q')

Falsestring.find(str, beg=0, end=len(string))

检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1

>>> s.find('J')

1

>>>

string.index(str, beg=0, end=len(string))

跟find()方法一样,只不过如果str不在 string中会报一个异常.

>>> s.index('q')

Traceback (most recent call last):

File "", line 1, in

ValueError: substring not found

>>> s.index('a')

0

string.isalnum()

如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False

>>> s.isalnum()

True

>>> ss='2345'

>>> ss.isalnum()

True

>>> '3232fsfsdf'.isalnum()

True

>>> sss="12_45"

>>> sss.isalnum()

False

string.isalpha()

如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False

>>> sss.isal

sss.isalnum( sss.isalpha(

>>> sss.isalpha()

False

>>> ss.isalpha()

False

>>> s.isalpha()

True

string.isdigit()

如果 string 只包含数字则返回 True 否则返回 False.

>>> sss.isdigit()

False

>>> ss.isdigit()

True

>>> s.isdigit()

False

string.islower()

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False

>>> ssss='123abc'

>>> ssss.islower()

True

string.isspace()

如果 string 中只包含空格,则返回 True,否则返回 False.

>>> ' '.isspace()

True

>>> '1 '.isspace()

False

string.istitle()

如果 string 是标题化的(见 title())则返回 True,否则返回 False

>>> 'Tjksskd'.istitle()

True

>>> 'Tjkss2kd'.istitle()

False

>>> 'Tjksskd'.istitle()

True

>>> 'TjkssFkd'.istitle()

False

string.isupper()

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

>>> 'AAAA_2323'.isupper()

True

>>> 'AAAAe_2323'.isupper()

False

string.join(seq)

以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

>>> '-'.join(['1','2','3','4'])

'1-2-3-4'

string.ljust(width)

返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

string.rjust(width)

返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

>>> s.ljust(20)

'aJJKbcefzxwu '

>>> s.rjust(20)

' aJJKbcefzxwu'

>>> s.center(20)

' aJJKbcefzxwu '

string.lower()

转换 string 中所有大写字符为小写.

>>> 'AAAAbbbb'.lower()

'aaaabbbb'

>>> 'AAAAbbb12b'.lower()

'aaaabbb12b'

string.lstrip()

截掉 string 左边的空格

string.rstrip()

删除 string 字符串末尾的空格.

string.strip([obj])

在 string 上执行 lstrip()和 rstrip()

>>> ' fafsafs '.lstrip()

'fafsafs '

>>> ' fafsafs '.rstrip()

' fafsafs'

>>> ' fafsafs '.strip()

'fafsafs'

max(str)

返回字符串 str 中最大的字母。

min(str)

返回字符串 str 中最小的字母。

>>> max(s)

'z'

>>> min(s)

'J'string.rfind(str, beg=0,end=len(string) )

类似于 find()函数,不过是从右边开始查找.

>>> s

'aJJKbcefzxwu'

>>> s.rfind('J')

2

string.rindex( str, beg=0,end=len(string))

类似于 index(),不过是从右边开始.

string.split(str="", num)

以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num次

>>> s2.split('-',3)

['a', 'b', 'c', 'd-e-f']

>>> s2.split('-',1)

['a', 'b-c-d-e-f']

string.splitlines(keepends=False)

按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

>>> test='a bc d\nfsfe\roopq'

>>> test.splitlines()

['a bc d', 'fsfe', 'oopq']

>>> test.splitlines(True)

['a bc d\n', 'fsfe\r', 'oopq']

>>>

string.startswith(obj, beg=0,end=len(string))

检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.

string.swapcase()

翻转 string 中的大小写

>>> 'aAbBcC'.swapcase()

'AaBbCc'

string.title()

返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())

>>> 'aAbBcC'.title()

'Aabbcc'string.upper()

转换 string 中的小写字母为大写

>>> 'a12bcMM'.upper()

'A12BCMM'

string.zfill(width)

返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0

>>> s

'aJJKbcefzxwu'

>>> s.zfill(30)

'000000000000000000aJJKbcefzxwu'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值