Python基础:Python数据类型详解之列表与元组
2017-03-02 23:43
1141 查看
Python数据类型
Python语言的一个特色是在变量赋值时,不需要声明变量的类型,原因是Python可以根据每个变量的初始赋值分析其类型,并在内部对其进行跟踪。 |
Python常见的数据类型简介如下:
Booleans(布尔型):其值为True或False。Numbers(数值型),分为以下几种:
Integer(整数)
Float(浮点数)
Fractions(分数)
复数
Strings(字符串型):是 Unicode 字符序列
List(列表):是值的有序序列
Tuples(元组):是有序且不可变的值序列
Dictionarys(字典):无序的键值对 // 但有方法可以使之变为有序的,而且据说Python3.7中的字典是有序的.
Sets(集合): 无序的
Bytes(字节)和Byte Arrays:例如: 一份 JPEG 图像文件。
NOTE:下面将依次详细介绍各种数据类型,及常用的方法。
下面直接上干货,争取用最简练的语言详解每个数据类型,及对应的常用方法。
Python数据类型详解
在说Python的数据类型前,先说说类和对象。Python.org是这样解释两者关系的:对象是对客观事物的抽象,而类是对对象的抽象。
set foldmethod=syntax
> type() #查看某个对象所属的类 >>> dir(str) #查看某个类都提供了什么方法。P.S.这里代码折叠功能怎么弄的?汗~ ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 4000 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
help(类名)是对这些类所含方法的详细描述。Python还可以help(类名.方法名),单独查看该方法的描述,如help(list.sort)
另外在pycharm中也可以通过Ctrl+类查看Python内部定义描述。
下面开始介绍Python的各种数据类型及常用方法。
列表、
列表是常用类之一,列表中的元素是有序的,通过列表可以对数据实现最方便的存储、修改等操作。定义及读取列表
names=['bolen','jack','nick'] 或names=list(['bolen','jack','nick']) >>> names[0] 'bolen' >>> names[-1] 'nick' >>> names[-2] 'jack' 可以正向、反向读取列表中的元素
可以看到下面列表支持的所有方法中,有的带双下划线开头并结尾的,有的不带,这是因为前者是Python内置的私有方法,后面的博客中会详细介绍这种方法,本篇之介绍不带下划线的一些常用方法。
“`
dir(list)
[‘add‘, ‘class‘, ‘contains‘, ‘delattr‘, ‘delitem‘, ‘dir‘, ‘doc‘, ‘eq‘, ‘format‘, ‘ge‘, ‘getattribute‘, ‘getitem‘, ‘gt‘, ‘hash‘, ‘iadd‘, ‘imul‘, ‘init‘, ‘iter‘, ‘le‘, ‘len‘, ‘lt‘, ‘mul‘, ‘ne‘, ‘new‘, ‘reduce‘, ‘reduce_ex‘, ‘repr‘, ‘reversed‘, ‘rmul‘, ‘setattr‘, ‘setitem‘, ‘sizeof‘, ‘str‘, ‘subclasshook‘, ‘append’, ‘clear’, ‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]
列表切片
>>> names ['bolen', 'yy', 'kity', 'jack', 'lily'] >>> names[0] #元素从0开始排序 'bolen' >>> names[0:2] #包前不包后 ['bolen', 'yy'] >>> names[0:-1] #最后一个元素是-1 ['bolen', 'yy', 'kity', 'jack'] >>> names[:-1] #等同于0:-1,:前不写的话默认是0,:后面不写默认是到-1 ['bolen', 'yy', 'kity', 'jack'] >>> names[2:-1] ['kity', 'jack'] >>> names[:-1] ['bolen', 'yy', 'kity', 'jack'] >>> names[2:] #如果想取到最后一个元素,就不写-1. ['kity', 'jack', 'lily'] >>> names[0:] ['bolen', 'yy', 'kity', 'jack', 'lily'] >>> names[:] ['bolen', 'yy', 'kity', 'jack', 'lily'] >>> names[::2] # :2代表每隔一个元素取一个 ['bolen', 'kity', 'lily'] >>>
append
>>> names ['bolen', 'yy', 'kity', 'max', 'hack'] >>> names.append('god') >>> names ['bolen', 'yy', 'kity', 'max', 'hack', 'god']
insert
>>> names.insert(2,'插入') #从kity前面插进去~ >>> names ['bolen', 'yy', '插入', 'kity', 'max', 'hack', 'god']
修改
>>> names[2] = '换个姿势' >>> names ['bolen', 'yy', '换个姿势', 'kity', 'max', 'hack', 'god']
删除
此处可用del #{这个貌似不是列表的方法?,dir(list)里也没有}及remove、pop三种删除方法。
>>> del names[2] #只能指定元素序号 >>> names ['bolen', 'yy', 'kity', 'max', 'hack', 'god'] >>> names=['bolen', 'yy', '换个姿势', 'kity', 'max', 'hack', 'god'] >>> names.pop() #默认弹出最后一个元素,pop后既可加具体的元素又可指定元素的序号 god >>> names.remove('max') #只能指定具体的元素,不能指定序号。 >>> names ['bolen', 'yy', '换个姿势', 'kity', 'hack']
extend
>>> names.insert(2,'插入') #从kity前面插进去~ >>> names ['bolen', 'yy', '插入', 'kity', 'max', 'hack', 'god']
>>> names+nums
['bolen', 'yy', '换个姿势', 'kity', 'max', 'hack', 'god', 6, 7, 8, 9]
>>> names
['bolen', 'yy', '换个姿势', 'kity', 'max', 'hack', 'god']
>>> names.extend(nums)
>>> names
['bolen', 'yy', '换个姿势', 'kity', 'max', 'hack', 'god', 6, 7, 8, 9]
copy
>>> names ['bolen', 'yy', '换个姿势', 'kity', 'max', 'hack', 'god', 6, 7, 8, 9] >>> name_copy=names.copy() >>> name_copy ['bolen', 'yy', '换个姿势', 'kity', 'max', 'hack', 'god', 6, 7, 8, 9] **Notes:** 这里要注意下深浅拷贝的区别,详见我下一篇博文的解析。这里不再赘述。
count
>>> names.insert(0,'bolen') >>> names.count('bolen') 2
sort&reverse
>>> names.sort()#Python3.0中不能对不同数据类型混合排序了 Traceback (most recent call last): File "<pyshell#43>", line 1, in <module> names.sort() TypeError: unorderable types: int() < str() >>> nums [6, 7, 8, 9, 1, 2, 4, 6, 9] >>> nums.sort() >>> nums [1, 2, 4, 6, 6, 7, 8, 9, ad3f 9] >>> names ['bolen', 'bolen', 'god', 'hack', 'kity', 'max', 'yy', '换个姿势'] >>> names.append('allen') >>> names ['bolen', 'bolen', 'god', 'hack', 'kity', 'max', 'yy', '换个姿势', 'allen'] >>> names.sort() >>> names ['allen', 'bolen', 'bolen', 'god', 'hack', 'kity', 'max', 'yy', '换个姿势'] --------------------------------------------------------- **reverse >>> names.reverse() >>> names ['换个姿势', 'yy', 'max', 'kity', 'hack', 'god', 'bolen', 'bolen', 'allen'] >>> nums.reverse() >>> nums [9, 9, 8, 7, 6, 6, 4, 2, 1]
获取下标
>>> names ['换个姿势', 'yy', 'max', 'kity', 'hack', 'god', 'bolen', 'bolen', 'allen'] >>> names.index('bolen')#只返回找到的第一个元素的下标 6
元组
元组其实就是不可变的列表,元组中的元素在创建之后不可被修改。a_tuple=('bolen','a','jack','nick','name') >>> a_tuple ('bolen', 'a', 'jack', 'nick', 'name') >>> a_tuple[0] 'bolen' >>> a_tuple[-1] 'name' >>> a_tuple[:-2] ('bolen', 'a', 'jack')
元组只能用于查看和切片,对元组切片会产生新的元组,对列表切片也会产生新的列表。
元组只有两个方法,count和index。
那么元组和列表的区别是什么呢?
元组与列表对比
劣势:
元组中的元组是不可变的,所以也就没有了列表中的pop、remove、insert、appand、extend等方法。
优势
1、元组比列表访问速度快,如果只是想写入元素,不对元素作变更,请用元组;
2、元组对元素写保护,相对列表会使代码更安全;
3、元组可作为字典键使用,列表由于是可变的,不会别用作字典键。
但要注意的是元组中的元素不可变是相对的,例如元组可以接受列表作为元素,且这里的列表还是可变的,列表也可以接受元组作为元素。
>>> b_tuple ('bolen', ['hack', 'list', '12'], 'jack', 'hack') >>> b_tuple[1][0] 'hack' >>> b_tuple[1].pop(2) '12' >>> b_tuple ('bolen', ['hack', 'list'], 'jack', 'hack') >>> b_tuple[1].append(22) >>> b_tuple ('bolen', ['hack', 'list', 22], 'jack', 'hack')
元组的应用
#便捷的为多变量赋值 >>> n=(1,2,3) >>> x,y,z=n >>> x 1 >>> y 2 >>> z 3 #但实测列表也是可以这么赋值的 >>> (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) >>> MONDAY 0 >>> [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY] = range(7) >>> TUESDAY
相关文章推荐
- Python数据类型详解(列表,元组,字典,日期)
- Python基础数据类型-列表(list)和元组(tuple)和集合(set)
- Python基础——原生数据类型(字典,列表,元组,字符串)
- Python数据类型——序列(字符串,列表,元组)
- Python数据类型list(列表)和tuple(元组)
- python内置数据类型:列表和元组
- python 数据类型:列表和元组
- Python Day2 数据类型: 列表元组和字典
- Python基础知识详解(数据类型、函数、包)
- python基础2(数据类型、数据运算、for循环、while循环、列表)
- Python基础:Python数据类型详解之字典与字符串
- Python基础——核心数据类型_序列_列表
- python基础教程之五种数据类型详解
- Python 学习 (一) python的基本数据类型 元组 列表 字典
- Python基础(3) - 数据类型:4元组类型
- python实操(5):python数据类型及常用操作,数字、字符串、元组、列表、字典、集合
- Python数据类型详解(二)列表
- python内置数据类型:列表和元组
- Python基础:1.数据类型(列表)
- 【Python 3这件小事】2.内置数据类型(二)——列表和元组