Python列表与C#语言的相似度介绍


Python列表有不少的知识需要我们学习,下面我们就来看看相关的代码,只有不断的学习才能更好的进行相关的编写。Python列表(list)类似于C#中的可变数组ArrayList),用于顺序存储结构。

列表用符号[]表示,中间的元素可以是任何类型包括列表本身,以实现多维数组),元素之间用逗号分隔。取值或赋值的时候可以像C数组一样,按位置索引:

  1. # -*- coding: utf-8 -*-  
  2. array = [1,2,3]  
  3. print array[0]  
  4. #输出 1  
  5. array[0] = 'a'  
  6. print array  
  7. #输出 ['a', 2, 3] 

从上边的代码中你可能发现一个有趣的事情:在Python的列表中可以混合使用不同类型的数据,像['a', 2, 3]这样,不过我不建议你这样做,我觉得没什么好处虽然个别场合下可能会比较方便)。

  • Python程序转为EXE文件正确实现方法讲解
  • Python绑定C++程序具体实现方法浅谈
  • Python显示UTF-8中文文本具体操作方法讲
  • Python对象主要特征解析
  • 简述Python语言经验总结

另外还可以看到,列表是可变的序列,也就是说我们可以在“原地”改变列表上某个位置所存储的对象(的值)。

C#中ArrayList支持的多数操作如追加、插入、删除、清空、排序、反转、计数等),Python中的list也都支持,同时list也支持“切片”这种操作。切片指的是抽取序列的一部分,其形式为:list[start:end:step]。其抽取规则是:从 start开始,每次加上step,直到end为止。默认的step为1;当start 没有给出时,默认从list 的第一个元素开始;当end=-1 时表示list 的最后一个元素,依此类推。一些简单的例子见下边代码:

  1. # -*- coding: utf-8 -*-  
  2. test = ['never', 1, 2, 'yes', 1, 'no', 'maybe']  
  3. print test[0:3] # 包括test[0],不包括test[3]  
  4. print test[0:6:2] # 包括test[0],不包括test[6],而且步长为2  
  5. print test[:-1] # 包括开始,不包括最后一个  
  6. print test[-3:] # 抽取最后3 个  

字符串、列表、元组都支持切片操作,这个很方便,应该学会熟练使用它。

最后,list是Python列表中最基础的数据结构,你可以把它当作链表、堆栈或队列来使用,效率还不错。Python中没有固定长度数组,如果你确实很在意性能,可以导入array模块来创建一个C风格的数组,它的效率很高,这里就不详细介绍了。

Python列表元组(tuple)

元组与列表非常相似,它是用()而不是[]括起来的序列。元组比列表的速度更快,但元组是一个不可变的序列,也就是与str一样,无法在原位改变它的值。除此之外,其他属性与列表基本一致。

元组定义的方法与列表类似,不过在定义只包含一个元素的元组时,注意在后边加一个逗号。请体会以下几句语句的差异:

  1. # -*- coding: utf-8 -*-   
  2. test = [0] #列表可以这样定义   
  3. print type(test) #输出<type 'list'>   
  4. test = [0,] #也可以这样定义   
  5. print type(test) #输出<type 'list'>   
  6. test = (0,) #元组可以这样定义   
  7. print type(test) #输出<type 'tuple'>   
  8. test = (0) #但不能这样定义,Python会认为它是一个括号表达式 print type(test) #输出<type 'int'> 
  9. test = 0, #也可以省略括号,但要注意与C的逗号表达式不同  
  10. print type(test) #输出<type 'tuple'> 

利用元组的这个特性,可以简化Python变量的初始化过程,如:

  1. x,y,z=1,2,3 

还可以很简单地进行数据交换。比如:

  1. a = 1 
  2. b = 2 
  3. a,bb = b,a 

以上这类语句在Python列表中被广泛应用于变量交换、函数传值等应用,因此Python的解释器在不断对其进行优化,现在已经具备了相当高的效率。所以以上代码在Python 2.5以后的版本中,比tmp = a; a = b; b = tmp这种常规语句更快。

评论关闭