python 菜鸟求问

2016-09-22 22:01:58 +08:00
 asdingo

《从零开始学 Python 》一书, s = HelloWorld! s[1:5]输出结果是 ello #这里[1:5]是第一个到第五个之间字符么? 为什么不包括第 5 个字符?

list = ['abc', 789, 2.23, 'join', 70.2] print(list[1:3])输出结果是[789,2.23] #这里[1:3]是第一个到第三个字符,这里怎么不是之间啊?

所以问题是这个封号:到底是怎么回事?

谢谢

2254 次点击
所在节点    Python
14 条回复
hyyou2010
2016-09-22 22:09:36 +08:00
我的理解是,[a:b]表示第 a 个到第 b-1 个元素,注意从 0 开始计数
所以 list[1:3]指第 1 、 2 个元素
jmc891205
2016-09-22 22:13:41 +08:00
[1:5]是第二个到第六个之间
[1:3]是第二个到第四个之间
Ge4Los
2016-09-22 22:19:41 +08:00
这书没告诉你切片的语法么? 为什么不选择右侧的书做为参考。
你那两个列表都是对的,:后面的下标不包含在输出的切片中。
Arnie97
2016-09-22 22:21:51 +08:00
左闭右开区间,等于 C 语言里
for (i=1; i<3; i++);
Lonely
2016-09-22 22:22:41 +08:00
左闭右开
arischow
2016-09-22 22:22:55 +08:00
0. 与你一般的习惯不同, 0 才是 1
1. 因为类型不一样

s = 'HelloWorld!'
这个是 str 类型, 即字符串

list_ = ['abc', 789, 2.23, 'join', 70.2]
这个是 list 类型,即列表

所以
s[1:5],是取字符串 s 的第 2 个到第 6-1 个元素(这里的元素是以字符为单位),所以是 'ello'


list_[1:3],这里的元素是以每一个元素(数据项(可以是各种类型,包括 list ))为单位,所以是取第 2 个到第 4-1 个元素,所以是 [789,2.23]

====================
另外我觉得笨方法学 Python ,有点绕,廖雪峰老师的教程看一遍不错。
asdingo
2016-09-22 22:55:17 +08:00
@arischow 非常感谢~ 廖雪峰老师的教程哪里有啊? 优酷?
arischow
2016-09-22 23:01:57 +08:00
chipmuck
2016-09-22 23:02:56 +08:00
RitchieLee
2016-09-22 23:08:31 +08:00
我感觉就是继承 C/C++ 的惯例,类似 [begin, end)
asdingo
2016-09-22 23:11:00 +08:00
@Ge4Los 好的 刚买了那本 python 学习手册
billlee
2016-09-22 23:57:57 +08:00
左开右闭区间
由于索引是从 0 开始计算的,所以最后一个元素的索引是 len(li) - 1, 这样 li[0, len(li)] 就刚好是整个列表。
KKKKKK
2016-09-23 00:28:22 +08:00
左闭右开这个属性在计算领域用得很广
Mistwave
2016-09-23 01:56:36 +08:00
slice range 都是左闭右开 多写写就熟悉了

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

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

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

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

© 2021 V2EX