《从零开始学 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]是第一个到第三个字符,这里怎么不是之间啊?
所以问题是这个封号:到底是怎么回事?
谢谢
1
hyyou2010 2016-09-22 22:09:36 +08:00
我的理解是,[a:b]表示第 a 个到第 b-1 个元素,注意从 0 开始计数
所以 list[1:3]指第 1 、 2 个元素 |
2
jmc891205 2016-09-22 22:13:41 +08:00
[1:5]是第二个到第六个之间
[1:3]是第二个到第四个之间 |
3
Ge4Los 2016-09-22 22:19:41 +08:00
这书没告诉你切片的语法么? 为什么不选择右侧的书做为参考。
你那两个列表都是对的,:后面的下标不包含在输出的切片中。 |
4
Arnie97 2016-09-22 22:21:51 +08:00 via Android
左闭右开区间,等于 C 语言里
for (i=1; i<3; i++); |
5
Lonely 2016-09-22 22:22:41 +08:00 via iPhone
左闭右开
|
6
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 ,有点绕,廖雪峰老师的教程看一遍不错。 |
8
arischow 2016-09-22 23:01:57 +08:00
|
9
chipmuck 2016-09-22 23:02:56 +08:00
|
10
RitchieLee 2016-09-22 23:08:31 +08:00 via Android
我感觉就是继承 C/C++ 的惯例,类似 [begin, end)
|
12
billlee 2016-09-22 23:57:57 +08:00
左开右闭区间
由于索引是从 0 开始计算的,所以最后一个元素的索引是 len(li) - 1, 这样 li[0, len(li)] 就刚好是整个列表。 |
13
KKKKKK 2016-09-23 00:28:22 +08:00 via Android
左闭右开这个属性在计算领域用得很广
|
14
Mistwave 2016-09-23 01:56:36 +08:00 via iPhone
slice range 都是左闭右开 多写写就熟悉了
|