pytho序列,字符串,元组---学习笔记

来源:互联网 发布:网络借贷安全班会 编辑:程序博客网 时间:2024/06/10 19:12
python string.zfill() 方法/函数:垫零左侧的字符串,以填补宽度。

python 序列操作

seq[ind]  获得下标为 ind 的元素
seq[ind1:ind2]  获得下标从 ind1 到 ind2 间的元素集合
seq * expr   序列重复 expr 次
seq1 + seq2  连接序列 seq1 和 seq2
obj in seq  判断 obj 元素是否包含在 seq 中
obj not in seq  判断 obj 元素是否不包含在 seq 中

1.连接操作符( + )
这个操作符允许我们把一个序列和另一个相同类型的序列做连接。语法如下:
sequence1 + sequence2
*对字符串来说,这个操作不如把所有的子字符串放到一个列表或可迭代对象中,然后调用一个 join方法来把所有的内容连接在一起节约内存;类似地,对列表来说,我们推荐读者用列表类型的extend()方法来把两个或者多个列表对象合并

2.切片操作符 ( [], [:], [::] )

sequence[index]
可以使用负索引,范围是 -1 到序列的负长度,-len(sequence), -len(sequence) <= index <= -1.正负索引的区别在于正索引以序列的开始为起点,负索引以序列的结束为起点.
因为 Python 是面向对象的,所以你可以像下面这样直接访问一个序列的元素(不用先把它
赋值给一个变量):
>>> print ('Faye', 'Leanna', 'Daylen')[1]
Leanna

sequence[starting_index:ending_index]
*sequence[0:3]==sequence[:3] (一端可省略)

sequence[starting_index:ending_index:step]
以下是几个例子:
>>> s = 'abcdefgh'
>>> s[::-1]  # 可以视作"翻转"操作
'hgfedcba'

>>> s[::2]  # 隔一个取一个的操作
'aceg'

*切片索引的语法要比简单的单一元素索引灵活的多。开始和结束素引值可以超过字符串的长度。
>>> ('Faye', 'Leanna', 'Daylen')[-100:100]
('Faye', 'Leanna', 'Daylen')

>>> for i in [None] + range(-1, -len(s), -1):
...     print "s[:%s]" % (i)
...     print s[:i]
...
s[:None]
abcdef
s[:-1]
abcde
s[:-2]
abcd
s[:-3]
abc
s[:-4]
ab
s[:-5]
a
**用 None 作为索引值,这样一来就可以满足你的需要,比如说,在你想用一个变量作为索引来从第一个到遍历最后一个元素的时候:


字符串
*Python 里面单引号和双引号的作用是相同的
>>> aString = 'Hello World!'  # 使用单引号
>>> anotherString = "Python is cool!" # 使用双引号
>>> print aString  # print 不带引号的 Hello World!
>>> anotherString  # 不是进行 print 操作,带有引号
'Python is cool!'
>>> s = str(range(4))  # 把一个列表转换成一个字符串
>>> s
'[0, 1, 2, 3]'

常用的内建函数:cmp(),len(), max(), min()
raw_input()
sort()和reverse():正排序和倒排序
>>> music_media
['compact disc', 45, '8-track tape', 'long playing record']
>>> music_media.sort()
>>> music_media
[45, '8-track tape', 'compact disc', 'long playing record']
>>> music_media.reverse()
>>> music_media
['long playing record', 'compact disc', '8-track tape', 45]
**在使用可变对象的方法如 sort(),extend()和 reverse()的时候要注意,这些操作会在列表中原地执行操作,也就是说现有的列表内容会被改变,但是没有返回值!

字符串方法有返回值
>>> 'leanna, silly girl!'.upper()
'LEANNA, SILLY GIRL!'
**不可变对象的方法是不能改变它们的值的,所以它们必须返回一个新的对象.

***元组和列表相比有一个很重要的区别,元组是一种不可变类型

元组
>>> aTuple = (123, 'abc', 4.56, ['inner', 'tuple'], 7-9j)
>>> anotherTuple = (None, 'something to see here')
>>> print aTuple
(123, 'abc', 4.56, ['inner', 'tuple'], (7-9j))
>>> print anotherTuple
(None, 'something to see here')
>>> emptiestPossibleTuple = (None,)
>>> print emptiestPossibleTuple
(None,)
>>> tuple('bar')
('b', 'a', 'r')

访问元组中的值,切片[], [:], [::]
跟数字和字符串一样,元组也是不可变类型,就是说你不能更新或者改变元组的元素
通过现有字符串的片段再构造一个新字符串的方式解决的,对元组同样。
删除一个单独的元组元素是不可能的,可以通过切片,拼接后赋给一个新的元组。
元组可以在两端加入元素:
>>> c = tuple('D') + a
>>> c
('D', 'd', 'u', 'c', 'h')
>>>

>>> t = t + ('fifth', 'sixth')
>>> t
('third', 'fourth', 'fifth', 'sixth')

在中间加:
>>> a[:1] + ('hello',) + a[1:]
('d', 'hello', 'u', 'c', 'h')
>>>


核心笔记:列表 VS 元组
一个经常会被问到的问题是,"为什么我们要区分元组和列表变量?"这个问题也可以被表述为“我们真的需要两个相似的序列类型吗?”,一个原因是在有些情况下,使用其中的一种类型要优于使用另一种类型。
最好使用不可变类型变量的一个情况是,如果你在维护一些敏感的数据,并且需要把这些数据传递给一个并不了解的函数(或许是一个根本不是你写的 API),作为一个只负责一个软件某一部分的工程师,如果你确信你的数据不会被调用的函数篡改,你会觉得安全了许多。 一个需要可变类型参数的例子是,如果你在管理动态数据集合时。你需要先把它们创建出来,逐渐地或者不定期的添加它们,或者有时还要移除一些单个的元素。这是一个必须使用可变类型对象的典型例子。幸运的是,通过内建的 list()和 tuple()转换函数,你可以非常轻松的在两者之间进行转换.
list()和 tuple()函数允许你用一个列表来创建一个元组,反之亦然.如果你有一个元组变量,但你需要一个列表变量因为你要更新一下它的对象,这时 list()函数就是你最好的帮手.如果你有一个列表变量,并且想把它传递给一个函数,或许一个 API,而你又不想让任何人弄乱你的数据,这时 tuple()函数就非常有用。
1 0
原创粉丝点击