V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tangyuan
V2EX  ›  Python

Python四种数据结构list/tuple/set/dict先进于PHP的一种(array)在哪里?

  •  
  •   tangyuan · 2012-08-21 17:57:43 +08:00 · 5863 次点击
    这是一个创建于 4478 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我记得PHP里面就一种array数据结构,也可以当字典来用,个人觉得简单明了,Python为和要设计4种不同的呢?我了解各有不同,譬如tuple是不可更改的,适合用于来做dict的key,但是都会很常用到吗?
    15 条回复    1970-01-01 08:00:00 +08:00
    reus
        1
    reus  
       2012-08-21 18:13:41 +08:00
    四种都会常用到的,说不上先进吧,取向不同而已
    array只是就是list和dict合体
    mikale
        2
    mikale  
       2012-08-21 18:22:16 +08:00
    这是编程风格问题....没有先进和不先进之分..

    语言只有高明之分,并无先进淘汰落后这种进化论分法
    ljbha007
        3
    ljbha007  
       2012-08-21 18:23:16 +08:00
    能想到的优点就是tuple可以用来返回多个值,比如

    (x,y) = getCoords()
    reus
        4
    reus  
       2012-08-21 18:26:08 +08:00
    php也可以:
    list($x, $y) = getCoords()
    py的话括号不是必须的,写成:
    x, y = getcoords()
    就行
    bhuztez
        5
    bhuztez  
       2012-08-21 18:36:27 +08:00
    Python不止四种数据结构吧, 基本的就有bytearray/dict/frozenset/list/set/tuple了,算上标准库,还有collections.namedtuple, collections.defaultdict, collections.deque, collections.OrderedDict, array.array。
    keakon
        6
    keakon  
       2012-08-21 18:44:52 +08:00
    4种数据结构确实都不可替代且经常使用。你能举个谁是多余的例子么…

    另外,方便这点算不算优点呢?
    [i * i for i in xrange(10)]
    ([0] * 100)[10:20]
    pyKun
        7
    pyKun  
       2012-08-21 18:46:12 +08:00
    个人理解:
    1.数据类型的细化有利于精细的编程,tuple可以简单明了的告诉读者这个变量在运行时不可变(某些条件下也事可变的。。。),set严格的吧表示数学意义上的集合,然后个generator是个很有意义的类型,楼主自己研究下
    2.dict和list的存在意义类似但不尽相同,list表示一个简单的集合,dict是一个支持增删改查的“数据库”类型,参考下《programming python》
    3.一个叫什么来着的思想,大概就是我们只需要让每个子程序仅仅保证完成自己的工作,进而保证总体工作的正常。。。不要把很多不同的任务依赖到一个程序上,类啊,还有这些不同的数据对象也是一样的,如果你天天总是接触到数学意义的集合,你会不会有一天想自己定义一个对象来保证集合里没有重复数据,这样方便你编程,于是python就给了你set
    Ranler
        8
    Ranler  
       2012-08-21 19:53:27 +08:00   ❤️ 2
    不懂PHP,但是研究过Lua解释器,Lua也是只有一种table数据结构,既可以当数组用也可以当字典,但是其内部实现还是会对不同的用途开辟不同存储区域,进行不同优化,上层结构只是封装了一下。

    数据结构分得越细,通用性越差,但是每种类型特性表现的越好,可以针对不同方向使用和优化。
    dianso
        9
    dianso  
       2012-08-21 23:20:23 +08:00
    语言没有所谓的优势
    aisk
        10
    aisk  
       2012-08-22 14:03:06 +08:00
    应该说提供很多种,但是这四种提供语法糖了吧…
    ivenvd
        11
    ivenvd  
       2012-08-22 15:53:57 +08:00
    除了用法上,速度也有区别,好象是 frozenset > set > tuple > list > dict ,不确定。
    kernel1983
        12
    kernel1983  
       2012-08-23 23:27:15 +08:00
    var in set和in list的速度, 自己可以比较看看
    chuck911
        13
    chuck911  
       2012-08-24 09:16:26 +08:00
    语法丑,array(),array_xx()
    当然php5.4对语法优化了
    est
        14
    est  
       2012-08-24 10:29:49 +08:00
    @bhuztez 恩。大数据运算经常用到namedtuple。非常省内存的一种结构。
    glasslion
        15
    glasslion  
       2012-08-24 15:49:03 +08:00
    list/tuple 和set/map 的底层实现的数据结构完全不同,不同操作的时间复杂度也不同。
    为了优化PHP/JS里四不像的数组,编译器开发人员不知耗费了多少心血
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2566 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 15:41 · PVG 23:41 · LAX 07:41 · JFK 10:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.