Python语法很奇怪啊

2012-01-02 14:34:04 +08:00
 vibbow
food = ["spam", "spam", "eggs", "sausages", "spam"]
print food[2:4]

为什么只打印 eggs 和 sausages 呢?
难道不应该是index从2到4么?
6199 次点击
所在节点    Python
25 条回复
phus
2012-01-02 14:36:24 +08:00
python想达到这样的一个效果:
food[a:c] = food[a:b] + food[b:c]
所以slice的区间就是前闭后开。
guolin
2012-01-02 14:44:27 +08:00
不奇怪,习惯就好了,省掉了开闭区间的麻烦。
vibbow
2012-01-02 14:52:01 +08:00
对Python各种不适应
算鸟,还是走 PHP + C# / C++ 路线吧...
binux
2012-01-02 14:58:21 +08:00
这不是正常的吗?
即使是C++ STL的copy,find
JS的Array.slice

不都是这样前闭后开的吗?
cmonday
2012-01-02 15:15:06 +08:00
我想问问哪门语言的子数组不是这么处理,而是像LZ说的前后都闭区间的?
Mutoo
2012-01-02 15:15:09 +08:00
我一开始也不适应,要是python能识别 [a,b] [a,b) (a,b] (a,b) 就好了
vibbow
2012-01-02 16:01:07 +08:00
关键是Python用的这个太尼玛像数学符号…
range的话又用的小括号…
ant_sz
2012-01-02 17:42:59 +08:00
好好体会 simple, sometimes native 的感觉,我觉得这个感觉很好的
clino
2012-01-02 22:01:31 +08:00
@vibbow 其实这个习惯就好了,而且我想这个设计应该是经过深思熟虑的,因为这个而放弃一门语言实在是...
range 是函数不能和这个相比较
flyingkid
2012-01-02 22:21:56 +08:00
如果是这样,那就学习ruby吧,爽到底
alsotang
2012-01-02 23:40:01 +08:00
@clino 对啊。。怎么能因为这个而放弃一门语言呢。1L不是已经给出这么设计的道理来了吗。。。C++的stl里面,xxx.end()也是指向最后一个元素的后一个位置呢。
range是个函数,而调用函数一般都使用()括号,这个很正常嘛。习惯就好,用python比背PHP的各种函数名方便多了。
sqbing
2012-01-02 23:40:50 +08:00
当然不是,从2开始,止于4前。
vibbow
2012-01-03 06:53:50 +08:00
现在主要用PHP,曾经还学过Haskell
Python的这一块和上两者一比较,用法就完全的不一样了。
ectotherm
2012-01-03 07:57:03 +08:00
程序中表示切片、迭代等等都喜欢用半闭区间,也就前闭后开,这样很方便的。包括C++ STL在内的很多库都这么干。
ywjno
2012-01-03 09:02:36 +08:00
换用ruby吧,支持前闭后开跟前闭后闭
miukal
2012-01-03 09:05:46 +08:00
既然这个语法叫切片,可以把[]里的数字理解成切的位置而不是元素索引。
比如有5个元素abcde
|a|b|c|d|e|
从0位置开始一共可以切6刀,所以[2:4]就是第2刀到第4刀之间的元素c,d
levn
2012-01-03 09:19:17 +08:00
drop 2 . take 4 $ the_list
1st
2012-01-03 10:18:19 +08:00
我记得Learning Python上写的就是这个意思。RT @miukal: 既然这个语法叫切片,可以把[]里的数字理解成切的位置而不是元素索引。
比如有5个元素abcde
|a|b|c|d|e|
从0位置开始一共可以切6刀,所以[2:4]就是第2刀到第4刀之间的元素c,d
clino
2012-01-03 21:54:26 +08:00
@miukal 解释得非常好,谢谢!这样就很清楚了.
falconeye
2012-01-09 17:10:18 +08:00
@miukal 进一步解释一下 food[2:-1]吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/24848

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX