【问题标题】:What does [:-1] mean/do in python? [duplicate][:-1] 在 python 中是什么意思/做什么? [复制]
【发布时间】:2013-03-10 05:39:13
【问题描述】:

正在处理一个 python 任务并且很好奇 [:-1] 在以下代码上下文中的含义:instructions = f.readline()[:-1]

在 S.O. 上搜索过这里和谷歌,但无济于事。希望得到解释!

【问题讨论】:

  • 有时-1用来表示一个数组的结束。我的猜测是这意味着从头到尾阅读(但只是猜测,因此不是官方答案)。
  • 我不确定这是不是一个重复,因为“在……的上下文中”部分——这是你,尤其是 Pavel Anossov 回答的部分。

标签: python


【解决方案1】:

它对字符串进行切片以省略最后一个字符,在本例中为换行符:

>>> 'test\n'[:-1]
'test'

由于这甚至适用于空字符串,因此它是删除最后一个字符(如果存在)的一种非常安全的方法:

>>> ''[:-1]
''

这适用于任何序列,而不仅仅是字符串。

对于文本文件中的行,我实际上会使用line.rstrip('\n')只删除一个换行符;有时文件中的最后一行不以换行符结尾,使用切片然后删除该行最后的任何其他字符。

【讨论】:

    【解决方案2】:

    它的意思是“除了最后一个序列之外的所有元素”。在f.readline()[:-1] 的上下文中,它的意思是“我很确定该行以换行符结尾,我想删除它”。

    【讨论】:

    • 虽然 Martijn Pieters 的回答更详细和解释性更强,但我喜欢这个直接描述使用 [:-1]readline 的习语,回答 OP 的“在……的上下文中”部分. (所以,对你们俩都 +1。)
    • 可能值得注意的是,做出这种假设可能是一件危险的事情,即使在您希望行尾标记为一个字符长的系统上也是如此——这种情况并不少见在文件的最后一行缺少换行符。当涉及到 Python 时尤其如此:我见过 '\n'.join(lines) 以前使用过,这将导致这种情况发生,然后你会丢失一个数据字符..
    【解决方案3】:

    它选择序列中除最后一个元素之外的所有元素。

    下面使用列表的示例:

    In [15]: a=range(10)
    
    In [16]: a
    Out[16]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    In [17]: a[:-1]
    Out[17]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
    

    【讨论】:

    • 它对 sequence 进行切片——它可能恰好是一个列表。
    【解决方案4】:

    它获取列表中的所有元素(或字符串中的字符),但最后一个元素。

    :代表遍历列表 -1 表示列表的最后一个元素

    【讨论】:

    • 这写得模棱两可,令人困惑。它是直到 但不包括 最后一个元素的所有元素。 (如果您已经知道切片/范围/等如何在 Python 中工作,那么知道 -1 是最后一个元素会告诉您您需要的一切……但如果您不知道,您仍然不会在此答案之后。)跨度>
    猜你喜欢
    • 2013-01-03
    • 2020-04-11
    • 1970-01-01
    • 2015-05-29
    • 2012-08-31
    • 2015-02-13
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多