【问题标题】:Slicing Python strings切片 Python 字符串
【发布时间】:2014-11-22 10:17:12
【问题描述】:

我目前正在尝试将特定字符串分割成多个部分,但总是出现索引错误。

字符串是:

columnData = "001.001.000.100.000.000.000"

myClassInstance = MyClass(
    param1 = columnData[0:3],  
    param2  = columnData[4:3], 
    param3 = columnData[8:3],  
    param4  = 0,             
    param5 = columnData[12:3], 
    param6 = columnData[16:3], 
    param7 = columnData[20:3], 
    param8 = columnData[24:3]  

)

每当它尝试设置 param8 时,我都会收到 out of index 错误。

然后我尝试将切片放入文件中以查看错误所在并尝试:

                        f = open("TestmyTset.txt","w")
                        f.write(columnData)
                        f.write("\nparam1: ")
                        f.write(columnData[0:3])
                        f.write("\nparam2r: ")
                        f.write(columnData[4:3])
                        f.close();

但 param2 从未打印到文件中。

输出是:

001.001.000.100.000.000.000
param1: 001
param2: 

所以我的问题是我的错误在哪里,因为我一次又一次地尝试并没有找到它(实际上每个切片都应该是字符串的 . 分隔部分之一)。

如被问及预期的输出将是:

param1 = "001"
param2 = "001"  (the 2nd 001 in the original string)
param3 = "000"
param4 = "0"
param5 = "100"
....

【问题讨论】:

  • 您对 columnData[4:3] 的期望是什么?
  • 我在那里更新了答案,以便清楚我在每个参数中的相应切片的期望
  • 在 param4 中,您期望“100”,但您已将其声明为 0。
  • tnx 是输入错误已更正
  • 好的,从答案中得到了......再次混淆了语言(考虑切片的长度而不是停止位置)

标签: python string slice


【解决方案1】:

我认为你想要做的是:

列数据[4:7] 列数据[8:11] 等等

我认为最好只是这样做

split_column_data = columnData.split('.')

在字符串中的每个. 处拆分字符串。并返回一个列表

>>>print split_column_data

['001', '001', '000', ... ]

【讨论】:

    【解决方案2】:

    slice()states 的文档:

    slice([start], stop[, step])

    返回一个 slice 对象,表示由range(start, stop, step) 指定的索引集。 startstep 参数默认为None。切片对象具有只读数据属性 startstopstep,它们仅返回参数值(或其默认值)。它们没有其他显式功能;但是它们被 Numerical Python 和其他第三方扩展使用。当使用扩展索引语法时,也会生成切片对象。例如:a[start:stop:step]a[start:stop, i]

    换句话说,你想要的是:

    param2 = columnData[4:7]
    param3 = columnData[8:11]
    ...
    

    【讨论】:

      【解决方案3】:

      据我了解您的问题,您似乎想对字符串进行切片,这样

      columnData = "001.001.000.100.000.000.000"
      
      myClassInstance = MyClass(
          param1 = columnData[0:3],  
          param2  = columnData[4:3], 
          param3 = columnData[8:3],  
          param4  = 0,             
          param5 = columnData[12:3], 
          param6 = columnData[16:3], 
          param7 = columnData[20:3], 
          param8 = columnData[24:3]  
      )
      

      必须设置

      param1 : 001
      param2 : 001
      param3 : 000
      param4 : 0
      param5 : 100
      param6 : 000
      param7 : 000
      param8 : 000
      

      据我所知

      a = "123456789" to 123
      print a[0:3]
      print a[3:6]
      .....
      

      会给

      123
      456
      ....
      

      所以对于您的示例,您需要设置

      columnData = "001.001.000.100.000.000.000"
      
      myClassInstance = MyClass(
          param1 = columnData[0:3],  
          param2  = columnData[4:7], 
          param3 = columnData[8:11],  
          param4  = 0,             
          param5 = columnData[12:15], 
          param6 = columnData[16:19], 
          param7 = columnData[20:23], 
          param8 = columnData[24:27]  
      )
      

      它会起作用的 :) 祝你好运!

      【讨论】:

      • 接受,因为它是最完整的答案(yepp 也适用于 tnx)
      【解决方案4】:

      python 中的切片如下: [start_index : end_index : step_size] - 换句话说,当您访问 columnData[4:3] 时,您尝试执行的操作是从索引 4 读取到索引 3 - 这是没有意义的。

      您需要阅读columnData[4:7] 以获得您想要的结果。

      我还建议您查看str.split,因为columnData.split('.') 会以更简单的方式为您提供所需的内容。

      【讨论】:

        【解决方案5】:
        columnData = "001.001.000.100.000.000.000"
        param1,param2,param3,param5,param6,param7,param8 = columnData.split('.')
        param4 = 0
        print ("param1 :{} , param2 :{}, param3 :{}, param4: {}, param5 :{}, param6 :{}, param7 :{},param8 :{}").\
                    format(param1, param2, param3, param4, param5, param6, param7, param8)
        
        
        Output:
        param1 :001 , param2 :001, param3 :000, param4: 0, param5 :100, param6 :000, param7 :000,param8 :000
        

        【讨论】:

          猜你喜欢
          • 2014-07-21
          • 2012-02-15
          • 2013-10-29
          • 2020-11-27
          • 1970-01-01
          • 1970-01-01
          • 2021-05-01
          • 2014-12-04
          相关资源
          最近更新 更多