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)和上面的语句有同样的效果
  • 相关阅读:
    ....
    CodeForces 375A(同余)
    POJ 2377 Bad Cowtractors (最小生成树)
    POJ 1258 AgriNet (最小生成树)
    HDU 1016 Prime Ring Problem(全排列)
    HDU 4460 Friend Chains(bfs)
    POJ 2236 Wireless Network(并查集)
    POJ 2100 Graveyard Design(尺取)
    POJ 2110 Mountain Walking(二分/bfs)
    CodeForces 1059B Forgery(模拟)
  • 原文地址:https://www.cnblogs.com/yizhu2000/p/802263.html
Copyright © 2011-2022 走看看