【问题标题】:Use of slice command with split command?将切片命令与拆分命令一起使用?
【发布时间】:2012-02-08 04:38:47
【问题描述】:
fh=open('asd.txt')
data=fh.read()
fh.close()

name=data.split('\n')[0][1:]
seq=''.join(data.split('\n')[1:])
print name
print seq

在这段代码中,第 3 行的意思是“只取第一行,去掉第一个字符”,而第 4 行的意思是“离开第一行并加入接下来的剩余行”。 我无法理解这两行的逻辑。 谁能解释一下这两个切片运算符 ([0][1:]) 是如何一起使用的? 谢谢

已编辑:将file 变量(也是关键字)重命名为data

【问题讨论】:

  • 不要使用file 作为变量。它是一个内置函数的名称。
  • 不要道歉。修复您的示例代码。
  • 有什么理由不使用readlines()?就像f.read().split('\n'),但更好。

标签: python split slice


【解决方案1】:

可以这样想:file.split('\n') 给你一个字符串列表。因此,第一个索引操作[0] 为您提供列表中的第一个字符串。现在,该字符串本身是一个字符“列表”,因此您可以执行[1:] 来获取第一个字符之后的每个字符。这就像从一个二维列表(列表的列表)开始并对其进行两次索引。

【讨论】:

  • 第一组方括号不是切片操作——它是索引操作。对于切片操作,冒号必须存在(例如 [:])。
【解决方案2】:

当被复杂的表达式弄糊涂时,按步骤去做。

>>> data.split('\n')[0][1:]

>>> data
>>> data.split('\n')
>>> data.split('\n')[0]
>>> data.split('\n')[0][1:]

这应该会有所帮助。

【讨论】:

  • 这是我几乎每天都在使用的一种技术,用于查看代码中发生了什么。我认为它对专家和初学者都有价值。
  • 是的。只是专家都会知道,但忘记向初学者解释,因为对他们来说感觉太琐碎了......
【解决方案3】:

每组 [] 只对split 返回的列表进行操作,结果 然后使用列表或字符串,而无需先将其分配给另一个变量。

像这样分解第三行:

lines = file.split('\n')
first_line = lines[0]
name = first_line[1:]

这样分解第四行:

lines = file.split('\n')
all_but_first_line = lines[1:]
seq = ''.join(all_but_first_line)

【讨论】:

    【解决方案4】:

    让我们一步一步来,(我想我知道名字和序列是什么):

    >>> file = ">Protein kinase\nADVTDADTSCVIN\nASHRGDTYERPLK"   <- that's what you get reading your (fasta) file 
    >>> lines = file.split('\n')            <- make a list of lines
    >>> line_0 = lines[0]                   <- take first line (line numbers start at 0)
    >>> name = line_0[1:]                   <- give me line items [x:y] (from x to y)
    >>> name
    'Protein kinase'
    >>> 
    >>> file = ">Protein kinase\nADVTDADTSCVIN\nASHRGDTYERPLK"
    >>> lines = file.split('\n')
    >>> seqs = lines[1:]                    <- gime lines [x:y] (from x to y) 
    >>> seq = ''.join(seqs)
    >>> seq
    'ADVTDADTSCVINASHRGDTYERPLK'
    >>>  
    

    在切片[x:y]中,包含x,不包含y。当你想到达列表的末尾时,不要指示 y -> [x:] (从索引 x 的项目到末尾)

    【讨论】:

      【解决方案5】:

      以此为例

      myl = [["hello","world","of","python"],["python","is","good"]]
      

      所以这里的 myl 是 list of list。所以,myl[0] 表示列表的第一个元素等于['hello', 'world', 'of', 'python'],但是当您使用myl[0][1:] 时,它意味着从列表中选择第一个元素,由myl[0] 表示,而不是从结果列表中选择(myl[0])选择除第一个元素以外的所有元素(myl[0][1:])。所以输出=['world', 'of', 'python']

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-06
        相关资源
        最近更新 更多