Python 变量之列表与实战经验
作者: Jim Wang 公众号: 巴博萨船长
Python 标准数据类型
Python 定义了一些标准数据类型,用于存储各种类型的数据。Python有五个标准的数据类型,分别是:
- Numbers(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Dictionary(字典)
Python 中的变量赋值不需要类型声明,也就是说声明变量不需要使用关键字。Python 中变量赋值之后该变量就被创建。可以简单对单一变量赋值,亦可对同一变量重新赋值(不同数据类型也可以),也可以同时为多个变量赋值,如下。
1 | counter = 100 # 赋值整型变量 |
Python 数据类型之列表
Python的变量灵活多变,不同的变量类型也有不同的使用技巧。上述的五种标准变量类型中string, list, tuple 都属于序列(sequence)类型。Python内置共有6种序列类型变量,分别为:
str, unicode, list, tuple, buffer, xrange(range)
其中只有一种可变序列类型,即List列表,其余的如tuple和range(关于xrange和range的区别,我会在以后总结介绍,或者可以在百度知道搜索#python for in原理#参考我的回答)都属于不可变的序列类型。这里所谓的”变” (mutable)是说,在对象创建之后,可以通过一些操作改变其内部状态,简言之就是改变对象本身。因为最近的工作遇到了很多关于列表的问题,今天我就借助这篇文章给大家介绍Python基本变量类型中的List,同时也给大家介绍一下List和Python内置函数相互配合的使用技巧。
Python 列表赋值与快速赋值
Python 列表使用方括号“[ ]”, 元素之间用逗号“,”分隔。列表元素的数据类型不限,可以是各种数据类型的集合,这点要比其他编程语言方便。列表元素个数不限,理论上只要内存足够大,元素个数就可以无限大。列表中的每个元素都分配一个数字作为索引,第一个索引值为0, 第二个为1,以此类推。List 列表普通赋值定义方法如下:
1 | list1 = ['physics', 'chemistry', 1997, 2000] |
然后就可以使用列表,但是在一些实际应用中需要初始化给定长度的列表,并对列表中每一个元素进行赋初值。如果列表长度在10以内,普通赋值依旧适用。如果列表长度过长,有可能需要写个循环进行赋值。技巧:可以使用下列方法对列表进行赋值:
1 | 0] * 5 # 数字类型 list1 = [ |
该方法快速高效,可以对指定长度的列表进行快速初始化,弊端在于不能在限定元素的类型,但可以按序混合元素的数据类型,如下:
1 | True, ""] * 3 list5 = [ |
Python 的列表索引,切片,改变与排序
Python 的列表索引方式和其他编程语言相似,即使用列表变量名,方括号与索引值进行索引。但Python与其他语言相比又有独特优势。即在方括号中使用冒号“:”+“数字” 对列表进行切片。切片可以理解为:取列表中指定的连续元素。如下:
1 | 'Google', 'Runoob', 'Taobao'] List1 = [ |
Python 的列表是一个类的实例,也就意味着列表有自己的类方法。可以通过类方法对列表进行改变或者其他操作。常用类方法如下:
- list.append(obj) # 在列表末尾添加新的对象
- list.count(obj) # 某个元素在列表中出现的次数
- list.extend(seq) # 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
- list.index(obj) # 从列表中找出某个值第一个匹配项的索引位置
- list.insert(index, obj) # 将对象插入列表
- list.pop(obj=list[-1]) # 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
- list.remove(obj) # 移除列表中某个值的第一个匹配项
- list.reverse() # 反向列表中元素
- list.sort([func]) # 对原列表进行排序
在这里我给大家介绍一下列表操作中,倒序排列(revers)和整理排序(sort)的实战经验。整理排序时,默认情况下,数字列表排序规则为:由小到大;字符串列表排列规则:由“0”到“10”,然后由a到z;数字和字符串混合型列表排序规则为:先数字,后字符。请参考下方例子:
1 | 'a', 1, "c", 3, "b", 2] lt = [ |
由上述例子可知,使用Python内置函数,返回值为一个列表,使用列表的类方法则返回值为空。意思就是说:在整理排序时,内置函数不改变原始列表,而使用类方法则原始列表将发生变化。在处理某些问题的时候,我们需要保持原始列表不变,这时候就应该考虑,哪一种方法更合适。这样的情况在倒序排列的时候也会发生,使用reverse()类方法时,虽然得到了倒序排列的列表,但是列表本身发生了变化,为了避免类似情况发生,备份一下原始列表是一种方法,但是会比较复杂。在这里我给大家介绍一个实用技巧。我们可以通过一种特殊的列表切片方法直接生成出一个倒序排列的新的列表,请参考下方例子:
1 | 'a', 1, "c", 3, "b", 2] lt = [ |
虽然python也有一个用于倒序排列的内置函数reversed(). 但是与sorted()函数不同,此函数返回值为一个列表迭(die)代器实例(iterator,以后的文章会详细介绍迭代器)而非一个新的列表,所以说用类似“**[::-1]**”的列表切片更为合适。
Python编程语言还有一些其它的内置函数用于处理列表。比如:不同列表间比较cmp(list1, list2),获取列表长度len(list),最大值max(list)最小值min(list),将元素变为列表list(seq)等。
Tipp 1: 虽然list不是python的保留字符 可以用list作为变量名,而且不会产生错误。 但是还是不建议使用其作为变量名。
Tipp 2: 其实python还有其他的不经常用到 的内置函数: 用all(list)来检查列表中是否所有元素都 为非空。 用any(list)来检查列表中是否有任何一个 为空。
Python 列表数据类型转换和实战经验
列表数据转换问题,一般分为两种情况。列表中元素的数据类型转换问题和整个列表数据类型转换问题。
列表元素数据类型转换,常见问题为数值类型和字符串类型间转换。例如将列表中的数字化字符串元素转换为数值类型元素,或反之; 或者将字符串列表的所有元素拼接,或反之。请参考下面例子。
1 | 1, 2.3, 3.4, 4.5, 5.6] # 将数值型转换为字符 ll = [ |
列表整体式地数据类型转换,常见问题:将列表整体转换为一个字符串和将一个字符串中的列表部分转换为一个列表。第一种情况请参考下方例子:
1 | 'a', 1, 'c', 3, 'b', 2] ss = [ |
可以看出只需要使用python的内置方法str()就实现。可是如果是第二种情况呢?如果要将字符串化的列表转换为一个列表,千万不要使用内置函数list()。因为不会得到预期的结果,这里要使用内置函数eval()。参考下方代码:
1 | "['a', 1, 'c', 3, 'b', 2]" st = |
Python基本数据类型中的List列表和列表的使用技巧今天就介绍到这里。想比大家都有这样的印象:如果能合理并巧妙地使用python内置函数来处理列表,将能够大大减少代码数量和提高代码质量。如果大家有别的想法或者其他使用技巧。欢迎订阅我的个人微信公共号,留言分享。
文章首发于 Jim Wang's blog , 转载文章请务必以超链接形式标明文章出处,作者信息及本版权声明。