在python中组合切片对象

时间:2018-06-21 17:29:55

标签: python

我想使用slice运算符提取前3个和最后3个项目。可以通过串联切片对象在一次调用中完成此操作吗?

module Tracking
  def create(name)
    object = new(name)
    @instances ||= [] # NOW note this line
    @instances.push(object) # using @instances
    return object
  end

  def instances
    @instances # just a getter now
  end
end



class Customer
  extend Tracking

  attr_accessor :name
  def initialize(name)
    @name = name
  end

  def to_s
    "[#{@name}]"
  end
end


2.4.1 :098 > puts "Customer.instances: %s" % Customer.instances.inspect
Customer.instances: [#<Customer:0x007f9772187d40 @name="Jason">]
 => nil
2.4.1 :099 > puts "Customer.create: %s" % Customer.create("Jason")
Customer.create: [Jason]
 => nil
2.4.1 :100 > puts "Customer.create: %s" % Customer.create("Kenneth")
Customer.create: [Kenneth]
 => nil
2.4.1 :101 > puts "Customer.instances: %s" % Customer.instances.inspect
Customer.instances: [#<Customer:0x007f9772187d40 @name="Jason">, #<Customer:0x007f9772037080 @name="Jason">, #<Customer:0x007f977223d690 @name="Kenneth">]

以上内容返回错误,因为不可能使用a = [1, 2, 3, 4, 5, 6, 7, 8, 9] s1 = slice(None, 3) s2 = slice(-3, None) s = s1 + s2 a[s] 。还有另一种方法吗?

我不在寻找答案: s = s1 + s2

1 个答案:

答案 0 :(得分:4)

没有对象s使得a[s]将是[1, 2, 3, 7, 8, 9]。切片对象不支持串联,list.__getitem__不了解可用于将两个切片捆绑在一起的任何对象。

在某个时候,您将必须切片两次并合并结果。您可以通过各种方式将其隐藏,例如,通过创建包装器,使wrapper(a)[s1, s2]执行两个切片操作并合并结果,但是您不能将作业委派给列表。