当人们谈论起 python 时都乐于说 python 优雅,数据结构丰富。本人值接触过 python 语言,没有其他语言的编程经验,请问又那些数据结构是 python 中有而其他语言中没有的。
1
miketeam 2016-11-16 18:27:37 +08:00 via iPhone
Swift 笑而不语!不过我也喜欢 python
|
2
shyling 2016-11-16 18:29:42 +08:00
什么 list,dict,set,tuple 咯
|
3
cheetah 2016-11-16 18:31:51 +08:00
可以看看 collections 里的几个
|
4
tinyproxy 2016-11-16 18:35:20 +08:00
骚年,来学个 C 你就知道了。。。看各种代码见过好几种 struct whatever_str; 而且实现的功能都差不太多。
|
5
est 2016-11-16 18:38:14 +08:00
不丰富。不如 j8 丰富。
|
6
chengluyu 2016-11-16 18:43:03 +08:00 3
之所以这么说不是因为 Python 能做其他语言不能做的事,而是 Python 有这庞大的开发者社群,开发了数不胜数的库,你只需要 pip install 后 import 就可以直接使用了,而不需要自己从头造轮子。理论上来讲,任何图灵完备的语言描述能力都是的等价的,所以不存在有什么数据结构是 Python 有但是其它语言没有的。
当然,这里讨论的「语言」都是指用于生产环境的命令式语言,不包括一些 DSL 。 |
7
dtfm 2016-11-16 18:56:58 +08:00 10
Python 的数据结构丰富和其他语言应该是等价的,但易用度明显甩开某些语言(此处不指名道姓)一个台阶。
举个栗子: 一个脸滚键盘的字符串 V2EX = 'ebreredfdfhdlfhferdlhgfdnhe' 求出里面包含的字符及字符出现的次数? Python 用推导式一梭子就出来 v2ex_count = { str : v2ex.count(str) for str in set( V2EX )} 让我回忆起以前用 Java 摇曳的青春 |
11
ivechan 2016-11-16 19:12:39 +08:00 1
数据结构跟语言有多大关系....
python 是易用和可读性比较好把. |
13
huntzhan 2016-11-16 19:39:22 +08:00
没有默认平衡树......
|
14
dexterzzz 2016-11-16 19:46:55 +08:00
python 写的好就是在写英文一样,就像写伪代码一样。
|
15
AyoCross 2016-11-16 20:00:15 +08:00
同意楼上,作为一个低端程序员, python 的可读性让我写代码的时候有种写伪代码的感觉, list tuple set dict 拿来就用,也不用怕野指针、资源没释放导致内存泄漏,比 C/C++爽多了。。
|
17
Tahw 2016-11-16 20:16:17 +08:00
collections ,少了个 s
|
19
liuxingou 2016-11-16 20:35:47 +08:00
数据结构往往是抽象的吧,未必就用语言本身提供的啊,楼上说得好, Python 最大魅力是日常轻度使用的门槛低,周期短,可读性好。
|
20
billlee 2016-11-16 22:24:13 +08:00
你去看看 C, 基本数据结构都没有提供;自己写出来的还要么不能泛型,要么就类型不安全。
|
21
guoziyan 2016-11-16 22:40:42 +08:00
多不多不敢保证,很灵活倒是真的
|
22
myid 2016-11-16 22:45:06 +08:00
@billlee C 没有提供基本数据结构--这种看法不严谨。 C 语言本身的确没有提供一些常用的数据结构--例如字典、集合等,而 C 语言可用的众多库还是提供了众多的数据结构实现。
C 和 Python 定位不同。 C 追求效率和灵活;赋予程序员极大的自由和特权去使用计算资源和优化计算--这是程序员喜爱的 C 的原因之一。 |
23
zzcflying 2016-11-16 23:07:00 +08:00
python 优势在于灵活吧
|
26
reus 2016-11-16 23:26:17 +08:00
|
27
Senevan 2016-11-16 23:32:47 +08:00 via Android
内部的 list tuple dict 不用自己实现,不够用就用 collections 的
|
28
introom 2016-11-16 23:43:29 +08:00 via Android
一点都不丰富,你看那个 heap,要多难用有多难用
|
32
SeanLin 2016-11-17 00:42:01 +08:00
难道不是因为 python 的有很多第三方的包吗 (如 numpy , pandas....
|
33
HuangLibo 2016-11-17 00:49:26 +08:00
@reus 你给的是开源产品源码,而非高可用的数据结构库,其实也可以自己把相关代码拿出来直接用,但是每个人都这么去搞只会增加这个世界的熵,,为什么 Github 上没有人去做这个很必要的工作呢
|
34
reus 2016-11-17 01:08:13 +08:00
@HuangLibo glib 是基础库, apr 是基础库, glibc 是基础库,不是“产品”,是 library ,不是 product 。它们都实现了各种数据结构。直接用,直接链接就能用。而且流行的 linux 发行版都打包了这些库。
这些 C 库早在 github 甚至 git 出现之前就出现了,拿来就能用,还需要什么额外工作? 当然用 C 的话,大多也是做基础软件,例如 Python 解析器这类。一般都喜欢自己实现适合自身的数据结构,而不是用现成的。但并不是说没有现成的数据结构库给你用,不要太小看 C 的生态。 |
35
hinkal 2016-11-17 01:40:59 +08:00 2
就知道会有人借机黑 Java...以代码写的简短来黑 Java 的,都太年轻太简单
|
36
102400 2016-11-17 03:35:32 +08:00
|
37
hareandlion 2016-11-17 09:02:39 +08:00 1
Python 的优势在于"据说程序员一生要写 600 万个花括号,谁先用完谁先走",这才对吧 :-D
|
39
WhyAreYouSoSad 2016-11-17 09:18:53 +08:00
@hareandlion 233333333333333333333
|
41
sun2920989 2016-11-17 09:30:20 +08:00 1
论结构丰富,我只服 PHP 的数组
|
43
kimboqi 2016-11-17 10:09:22 +08:00
numpy pandas 你会喜欢的
|
44
liqiazero 2016-11-17 10:22:23 +08:00
推荐看一下 《 Python 语言剖析》 陈儒写的, 08 年的书,满篇 C 语言的 Python 底层代码,各种数据结构的底层代码,读懂也就不会纠结于这个问题了。推荐看一下
|
45
tairan2006 2016-11-17 11:13:35 +08:00
论数据结构,应该是 C++的标准库里面最多吧。。如果加上 boost ,基本常见的都有了
|
46
shell92 2016-11-17 11:25:10 +08:00
嗯。。。。。。。
|
47
est 2016-11-17 12:13:24 +08:00
C 语言里能用一个 hash 已经是中级以上水平的了。
用 C 实现一个 hmac 就得花很多功夫。不用第三方现成的库的话。 |
48
masterqing 2016-11-17 12:47:16 +08:00
ruby 写的才像英语
|
49
mooncakejs 2016-11-17 12:47:49 +08:00
@hareandlion py 作者的兼职是卖出 1000w 把尺子
|
50
myid 2016-11-17 14:34:38 +08:00
就 7 楼的例子,来个 C++的实现, 2 行。怎么样?不逊于 Python 实现吧?行数一样, 2 行。自带数据结构,在 C++的 STL 里称为 map -- 支持范型,类型安全,效率和质量在工程上有口皆碑。
std::map<char, int> v2ex; for (auto const& x : "ebreredfdfhdlfhferdlhgfdnhe") { ++v2ex[x]; } |
51
haoc 2016-11-17 14:45:05 +08:00
python 数据结构真心没有 java 丰富。
|
54
102400 2016-11-17 15:38:22 +08:00
@NaVient
算上 import 也是三行吧, Ruby 可以这样 v2ex = 'ebreredfdfhdlfhferdlhgfdnhe' counters =-> s { s.chars.map { |c| [c, s.count(c)] }.to_h } counters.call v2ex |
55
wujunze 2016-11-17 15:41:48 +08:00
@sun2920989 +1
|
56
est 2016-11-17 17:26:16 +08:00
|
58
wingyiu 2016-11-17 18:52:26 +08:00
@sun2920989 2333
|
59
myid 2016-11-17 20:59:22 +08:00 via iPhone
@est STL 不是第三方库哦 所有不是很古董的 c++编译器都自带 STL 。 boost 特别一点 就不在这里展开了。要比生态环境 (例如数据结构实现) c/c++和 Python 一样强,甚至更强。 26 楼和 34 楼已给了解释和例子。
|
62
billlee 2016-11-17 23:06:33 +08:00
@HuangLibo 我是两个都很了解才会这样说,看过改过太多低质量的 C 代码了。 C 代码需要程序员的水平很高才能写好。 C++ 就算水平差一些,把它按照 MFC 风格或者 Java 风格来用,至少还比较容易看懂。
|
63
est 2016-11-17 23:16:42 +08:00
@myid 好吧。咋们来比赛解析 JSON 。 😂。
特别是 key-value 的 type 不确定。比如取一个 key 的值 既可能是 int 又可能是 [int, float, string] 这种的。 用 C++ 撸一个试试? |
64
tracymcladdy 2016-11-17 23:29:51 +08:00
@dtfm
|
65
Miy4mori 2016-11-17 23:43:58 +08:00 via Android
Python 丰富?真涨见识……
|
66
msg7086 2016-11-18 00:41:38 +08:00
Python 代码量太大了,为了可读性牺牲了简短小巧……
|
67
lyz1990 2016-11-18 10:53:28 +08:00
PHP :
count_chars('ebreredfdfhdlfhferdlhgfdnhe',1) |