【问题标题】:How can I use colon (:) in variable [duplicate]如何在变量中使用冒号 (:) [重复]
【发布时间】:2017-03-24 17:29:22
【问题描述】:

我想写这样的代码:

index = 0:2
print(list[index])

但这不起作用。

有什么方法可以将[...:...] 语法的所有部分存储在一个变量中?

【问题讨论】:

  • 不,你不能。这不是有效的 Python 语法。
  • 不,在 Python 中,它不可能对整数/浮点数执行此操作。您可以将它们用于字符串(例如:index = "0:2")。
  • @leaf: 但是有有效的语法来表达 intent
  • @Turry: 但该字符串不能在订阅中使用。
  • 相关帖子和不错的阅读stackoverflow.com/questions/3911483/…

标签: python list python-3.x variables


【解决方案1】:

你想要一个slice() object

index = slice(0, 2)
print(somelist[index])

slice() 将您可以在[start:stop:stride] 订阅语法中指定的开始、停止和步幅值建模为对象。

来自文档:

返回一个slice 对象,表示range(start, stop, step) 指定的索引集。 start 和 step 参数默认为 None。 Slice 对象具有只读数据属性 startstopstep,它们仅返回参数值(或其默认值)。

实际上,Python 在调用自定义 __getitem__ 方法时会将订阅转换为 slice() 对象:

>>> class Foo(object):
...     def __getitem__(self, item):
...         return item
...
>>> Foo()[42:81:7]
slice(42, 81, 7)
>>> Foo()[:42]
slice(None, 42, None)

一个可行的替代方法是将开始和停止存储为单独的值:

startindex = 0
stopindex = 2
print(somelist[start:stop])

【讨论】:

  • 谢谢,但是“index = -2:”呢
  • @giorgishengelaia:那就是slice(-2, None)。试试我的Foo() 示例; Foo()[-2:] 返回slice(-2, None, None)
  • @leaf:如果你想一次建模-2:,然后再建模:4
  • @leaf:您的方法index = -2somelist[index:] 将您限制为仅使起点可变。您可以使用 三个 变量,一个用于开始、停止和跨步,然后在任何地方使用somelist[start:stop:stride],但这非常冗长。在这里使用slice() 对象要优雅得多。
  • @leaf:是的,在他们的例子中,他们只有一个起始变量。然而在问题中,他们有一个 end 变量(忽略默认为0 的开始)。所以这显然是一个关于对切片的所有部分进行建模的问题,而不仅仅是切片中的单个值。
【解决方案2】:

您可以改为创建 slice 对象:

index = slice(0,2)
print(lst[index])

注意不要使用list 作为名称,以免影响内置的list 函数。

来自文档:

slice(start, stop[, step])

返回一个切片对象,表示由指定的索引集 range(start, stop, step)

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 2023-03-22
    • 2011-01-21
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    相关资源
    最近更新 更多