Python自学之基础篇02|基本数据类型:列表,元组,字符串
在上一篇分享学习中提到过python3中有六种基本数据类型,然后学习了Number型数据及其运算符。本篇将继续上一篇的内容,介绍其他数据类型及其有关操作方法。
列表(List)
定义
列表是最常用的Python数据类型,用方括号【】来表示,并用逗号来分隔其中的元素。列表由一系列按特定顺序排列的元素组成,而这些元素不需要具有相同的类型。建议用一个复数来为列表指定名称,如games,names。
基本操作
- 列表创建
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。
list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
- 列表访问
列表是有序集合,因此要访问列表中的任何元素,只需将元素的位置或索引告之python即可。需要注意的是,在python中第一个列表元素的索引是0而非1。有个小技巧就是要访问列表中的任何元素,都可以将其位置减1,并将结果作为索引。
list2 = [1, 2, 3, 4, 5, 6, 7 ]
print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]
输出结果:
list1[0]: physics
list2[1:5]: [2, 3, 4, 5]
- 列表修改
要修改列表元素,课制定列表名和要修改元素的索引,再指定此索引位置元素的新值。
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles]
输出结果:
['honda','yamaha','suzuki']
['ducati','yamaha','suzuki']
- 列表添加
在列表中添加新元素,一般是将元素附加到列表末尾,这时候使用方法append()即可。因为经常要等程序运行后才知道用户要在程序中存储哪些数据,所以为了控制用户可先创建一个空列表用于存储用户将要输入的值,然后将用户提供的每个新值附加到列表中。当然也可以在列表的任何位置添加新元素,只需要制定新元素的索引和值即可。
motorcycles = ['honda','yamaha','suzuki']
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)
输出结果:
['honda','yamaha','suzuki']
['honda','yamaha','suzuki','ducati']
- 列表删除
你可以根据位置或值来删除列表中的元素。删除的方式有多种,下面逐一介绍。
#使用del语句删除元素
motorcycles = ['honda','yamaha','suzuki']
del motorcycles[0]
print(motorcycles)
#使用方法pop()删除元素
motorcycles = ['honda','yamaha','suzuki']
popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)
#使用方法remove()根据值删除元素
motorcycles = ['honda','yamaha','suzuki','ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)
输出结果:
['yamaha','suzuki']
['honda','yamaha']
['suzuki']
['honda','yamaha','suzuki','ducati']
['honda','yamaha','suzuki']
- 列表截取
你可以利用切片来实现对列表的截取。
>>>L = ['Google', 'Runoob', 'Taobao']
>>> L[2]
'Taobao'
>>> L[-2]
'Runoob'
>>> L[1:]
['Runoob', 'Taobao']
>>>
相关方法
在Python中对方法的定义是指可对数据执行的操作。比如在name.titile()中,name后面的句点让Python对变量name执行方法title()指定的操作。每个方法后面都跟着一对括号,这是因为方法通常需要额外的信息来完成其工作。这种信息是在括号内提供的。方法titiel()不需要额外的信息,因此它后面的括号内是空的。
序号 | 方法 |
---|---|
1 | list.append(obj) 在列表末尾添加新的对象 |
2 | list.count(obj) 统计某个元素在列表中出现的次数 |
3 | list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
4 | list.index(obj) 从列表中找出某个值第一个匹配项的索引位置 |
5 | list.insert(index, obj) 将对象插入列表 |
6 | list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
7 | list.remove(obj) 移除列表中某个值的第一个匹配项 |
8 | list.reverse() 反向列表中元素 |
9 | list.sort(cmp=None, key=None, reverse=False) 对原列表进行排序 |
元组(Tuple)
定义
Python将不能修改的值称为不可变的,而不可变得列表被称为元组。元组看起来犹如列表,但使用()来标识。相比列表,元组是更简单的数据结构。如果需要存储的一组值在程序的整个生命周期内部不变,可使用元组。
基本操作
- 元组访问
元组可以使用下标索引来访问元组中的值。
tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print "tup1[0]: ", tup1[0]
print "tup2[1:5]: ", tup2[1:5]
输出结果:
tup1[0]: physics
tup2[1:5]: (2, 3, 4, 5)
- 元组修改
虽然不能修改元组的元素,但可以给存储元组的变量赋值,也可以对元组进行连接组合操作。
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
#以下修改元组元素操作是非法的。
#tup1[0] = 100
#创建一个新的元组
tup3 = tup1 + tup2
print tup3
输出结果:
(12, 34.56, 'abc', 'xyz')
- 元组删除
组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组。
tup = ('physics', 'chemistry', 1997, 2000)
print tup
del tup
print "After deleting tup : "
print tup
输出结果:
('physics', 'chemistry', 1997, 2000)
After deleting tup :
Traceback (most recent call last):
File "test.py", line 9, in <module>
print tup
NameError: name 'tup' is not defined
- 元组截取
与列表一样,你可以访问元组中的指定位置的元素,也可以截取索引中的一段元素。
字符串(String)
定义
字符串就是一系列字符,是 Python 中最常用的数据类型。在Python中用引号括起来的都是字符串,其中引号可以是单引号,也可以双引号。
基本操作
- 字符串访问
可以使用切片的方法来访问截取字符串。
var1 = 'Hello World!'
var2 = "Python Runoob"
print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]
输出结果
var1[0]: H
var2[1:5]: ytho
- 字符串更新
你可以对已存在的字符串进行修改,并赋值给另一个变量。
var1 = 'Hello World!'
print "更新字符串 :- ", var1[:6] + 'Runoob!'
输出结果:
更新字符串 :- Hello Runoob!
-
转义字符
在需要在字符中使用特殊字符时,python用反斜杠()转义字符。 -
字符串运算符
相关方法
方法 | 描述 |
---|---|
string.capitalize() | 把字符串的第一个字符大写 |
string.center(width) | 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 |
string.count(str, beg=0, end=len(string)) | 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 |
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. |
string.expandtabs(tabsize=8) | 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8. |
string.find(str, beg=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 |
string.format() | 格式化字符串 |
string.index(str, beg=0, end=len(string)) | 跟find()方法一样,只不过如果str不在 string中会报一个异常. |
string.isalnum() | 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False |
string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False |
string.isdecimal() | 如果 string 只包含十进制数字则返回 True 否则返回 False. |
string.isdigit() | 如果 string 只包含数字则返回 True 否则返回 False. |
string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
string.isnumeric() | 如果 string 中只包含数字字符,则返回 True,否则返回 False |
string.isspace() | 如果 string 中只包含空格,则返回 True,否则返回 False. |
string.istitle() | 如果 string 是标题化的(见 title())则返回 True,否则返回 False |
string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
string.join(seq) | 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
string.ljust(width) | 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 |
string.lower() | 转换 string 中所有大写字符为小写. |
string.lstrip() | 截掉 string 左边的空格 |
string.maketrans(intab, outtab]) | maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 |
max(str) | 返回字符串 str 中最大的字母。 |
min(str) | 返回字符串 str 中最小的字母。 |
string.partition(str) | 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组(string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string. |
string.replace(str1, str2, num=string.count(str1)) | 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次. |
string.rfind(str, beg=0,end=len(string) ) | 类似于 find()函数,不过是从右边开始查找. |
string.rindex( str, beg=0,end=len(string)) | 类似于 index(),不过是从右边开始. |
string.rjust(width) | 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 |
string.rpartition(str) | 类似于 partition()函数,不过是从右边开始查找 |
string.rstrip() | 删除 string 字符串末尾的空格. |
string.split(str="", num=string.count(str)) | 以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+ 个子字符串 |
string.splitlines([keepends]) | 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 |
string.startswith(obj, beg=0,end=len(string)) | 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查. |
string.strip([obj]) | 在 string 上执行 lstrip()和 rstrip() |
string.swapcase() | 翻转 string 中的大小写 |
string.title() | 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) |
string.translate(str, del="") | 根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中 |
string.upper() | 转换 string 中的小写字母为大写 |
字符串格式化问题
Python 支持格式化字符串的输出,输出方式分为两种,即百分号与format。
- 百分号%
用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
print "My name is %s and weight is %d kg!" % ('Zara', 21)
输出结果:
My name is Zara and weight is 21 kg!
- 函数format
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和.format 来代替以前的 % 。
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
>>> "{0} {1}".format("hello", "world") # 设置指定位置
'hello world'
>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
也可以设置参数:
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
#通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))
#通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的
输出结果:
网站名:菜鸟教程, 地址 www.runoob.com
网站名:菜鸟教程, 地址 www.runoob.com
网站名:菜鸟教程, 地址 www.runoob.com
也可以向 str.format() 传入对象:
class AssignValue(object):
def __init__(self, value):
self.value = value
my_value = AssignValue(6)
print('value 为: {0.value}'.format(my_value)) # "0" 是可选的
输出结果:
value 为: 6