zoukankan      html  css  js  c++  java
  • 通过对比学Python(2):集合对象 朱燚:

    集合对象

    任何一门语言的集合对象都是重中之重,一般包括固定数组,可变数组,字典 (hashtable),还有其他一些特殊集合,.net里System.Collection以 System.Collection.Specialize下的类,Java中Java.util.Collections包中的类就是与此相关.另外, 这两种环境中的数组都为固定长度数组,但是也同时提供可变长度的列表类ArrayList(两种环境都叫这个名字).

    而php中,数组和字典混合了起来,也就是说,即可以通过顺序方式访问,也可以为数组的每个元素设置一个key

    那么python里面的集合类是怎么使用又具有什么特点呢?

    Lists(列表类):

    这个类可以类比为.Net和java中的ArrayList,是一个可变长度,没有类型约束的数组;

    • 创建列表对象

    myTags=['a','aa','b','A','啊'],这个语句创建了一个列表对象,并赋予了初始值,注意这里初始值用中括弧[]括起来,后面还有其他的集合类型,他们的符号稍微不同,千万小心

    • 添加删除修改元素

    下面的语句往刚刚初始化的数组中添加一个整数类型的对象

    myTags.append(0),这个语句吧0这个整数加入到列表中去

    与之对应的删除一个元素的方法为Remove,比如下面语句把内容为b的元素删除

    myTags.remove('b'),注意如果list中有两个内容为b的元素,remove方法会删除序号小的那个,而如果列表中么有内容为"b"的元素,那么会报错

    myTags[0]="abc",把这个列表的第一项修改为"abc",注意这里数组还是从0开始,而不像VB和Fortran(没听说过?有代沟...)是从1开始的.

    • 打印列表内容

    打印这个列表的方法非常简单

    print myTags

    输出结果为:
    ['a', 'aa', 'b', 'A', u'\u554a',0]

    不用进行任何循环,呵呵,方便吧,更强大的功能还在后面

    • 对列表进行排序

    我们还可以为对list对象进行排序,

    myTag.sort()

    上面的语句执行结果是

    >>> print myTags
    [0, 'A', 'a', 'aa', 'b', u'\u554a']

    可以看出排序是按照ascii码表的对应顺序来的,中文被转化为unicode表示显示并排在最后,.net和java里都有这个功能,实现各有不同,参看下面的翻转列表

    • 反转列表
      通过myTags.reverse()这个方法,我们就可以把列表翻转,再次打印,输出结果为

    [u'\u554a', '{', 'b', 'aa', 'a', '\\', 'A', 0]

    这个方法.net的ArrayList也有提供,而java中用通过Collection类的reverse静态方法操作一个集合对象来实现如 ArrayList list=new ArrayList(),Collection.reverse(list),这个类同时也提供了排序,获得最大/小值,拷贝,循环等等方法,但是这个实用的类却常常被忽略,呜呼哀哉!

    • 其他方法
      list类还有学多方法,包括用count属性查看列表长度,pop弹出指定位置的数据,我们就不一一讲解了,有兴趣的可以通过dir命令查看List对象具有的方法
    Tuple(不变列表)

    这个类的名称对.Net和Java的程序员很不直观,没有对应的名词,但是他的概念其实很简单,即一旦创建就不能改变,虽然Tuple没有公开的方法来增加元素,但是通过一些内置方法,我们仍然可以做到这点

    • 创建Tuple
      myTuple=('Field','Method','Class') 是不是很类似于.net中数组的声明和初始化string[] myTags ={ ".Net", "DataBase", "Python" };
      注意这里用原括弧(),而不是中括弧,也不是.net中申明数组的大括弧{}
    • Tuple在输出语句中的用法
      print '%s is %d years old' % (name, age),这个语句把姓名和年龄按照顺序填到字符串的置顶位置,然后输出,用过c语言的人对%s,%d肯定不陌生,一个置顶内容为字符串,一个指定内容为数字.后面那个%d也可以写成s%,实际上所有的情况你都可以写成%s,让python自己来搞定转换工作,但是写出正确的类型可以杜绝下面的情况,比如你的程序有错误,不小心往年龄里添了个字符串,这是运行到这里代码就报错了.
      .net里面实现这个功能类似的语法是这样来做 Console.WriteLine("'{0} is {1} years old",name,age),可以看到.net要灵活一些,后面的name和age不一定要按照顺序给出,比如Console.WriteLine ("'{1} is {0} years old",age,name)和上面的语句有同样的效果
  • 相关阅读:
    欧几里得 与 扩展欧几里得
    hdu-1559 最大子矩阵
    hdu-1081 To The Max (最大子矩阵和)
    Oracle处理排序问题
    报表犯的错误
    MySQL中汉字一二三排序问题
    MySQL复习
    帆软查看显示和填报显示
    MySQL某年查询12个月份的数据
    mysql中去日期格式
  • 原文地址:https://www.cnblogs.com/yizhu2000/p/802263.html
Copyright © 2011-2022 走看看