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
asdingo
V2EX  ›  Python

python 菜鸟求问

  •  
  •   asdingo · 2016-09-22 22:01:58 +08:00 · 2221 次点击
    这是一个创建于 2970 天前的主题,其中的信息可能已经有所发展或是发生改变。

    《从零开始学 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]是第一个到第三个字符,这里怎么不是之间啊?

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

    谢谢

    14 条回复    2016-09-23 01:56:36 +08:00
    hyyou2010
        1
    hyyou2010  
       2016-09-22 22:09:36 +08:00
    我的理解是,[a:b]表示第 a 个到第 b-1 个元素,注意从 0 开始计数
    所以 list[1:3]指第 1 、 2 个元素
    jmc891205
        2
    jmc891205  
       2016-09-22 22:13:41 +08:00
    [1:5]是第二个到第六个之间
    [1:3]是第二个到第四个之间
    Ge4Los
        3
    Ge4Los  
       2016-09-22 22:19:41 +08:00
    这书没告诉你切片的语法么? 为什么不选择右侧的书做为参考。
    你那两个列表都是对的,:后面的下标不包含在输出的切片中。
    Arnie97
        4
    Arnie97  
       2016-09-22 22:21:51 +08:00 via Android
    左闭右开区间,等于 C 语言里
    for (i=1; i<3; i++);
    Lonely
        5
    Lonely  
       2016-09-22 22:22:41 +08:00 via iPhone
    左闭右开
    arischow
        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 ,有点绕,廖雪峰老师的教程看一遍不错。
    asdingo
        7
    asdingo  
    OP
       2016-09-22 22:55:17 +08:00
    @arischow 非常感谢~ 廖雪峰老师的教程哪里有啊? 优酷?
    RitchieLee
        10
    RitchieLee  
       2016-09-22 23:08:31 +08:00 via Android
    我感觉就是继承 C/C++ 的惯例,类似 [begin, end)
    asdingo
        11
    asdingo  
    OP
       2016-09-22 23:11:00 +08:00
    @Ge4Los 好的 刚买了那本 python 学习手册
    billlee
        12
    billlee  
       2016-09-22 23:57:57 +08:00
    左开右闭区间
    由于索引是从 0 开始计算的,所以最后一个元素的索引是 len(li) - 1, 这样 li[0, len(li)] 就刚好是整个列表。
    KKKKKK
        13
    KKKKKK  
       2016-09-23 00:28:22 +08:00 via Android
    左闭右开这个属性在计算领域用得很广
    Mistwave
        14
    Mistwave  
       2016-09-23 01:56:36 +08:00 via iPhone
    slice range 都是左闭右开 多写写就熟悉了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2618 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 05:28 · PVG 13:28 · LAX 21:28 · JFK 00:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.