【问题标题】:List cherry picking slicing method [duplicate]列出樱桃采摘切片方法[重复]
【发布时间】:2017-12-20 11:18:17
【问题描述】:

表达问题相当简单,但我不能 100% 确定我的术语是正确的。尽管如此,从概念上讲,“樱桃采摘”很适合描述我心目中的切片。这是因为我只想访问(从所有元素中挑选)列表中两个遥远的元素。我试过这个:

my_list[2,7]

所以我希望它只返回 2 个元素,但我得到了错误:

列表索引必须是整数,而不是元组。

我搜索了这个错误,但我发现它实际上是一个非常普遍的错误,导致这个错误的问题实际上都不是我的问题类型。

我想我可以一次提取元素 1,然后将它们合并,但我的直觉告诉我还有一种更“pythonic”的方式。

我遇到的这个问题的一个稍微复杂一点的形式是从现有列表中构建一个新列表:

new_list = []
for i in range(len(my_list)):
    new_list.append(my_list[i][2,7])

【问题讨论】:

  • 一次提取一个元素。无需将如此简单快速的操作复杂化。
  • @JimFasarakisHilliard 确实,事后看来,这个例子太简单了。我已经包含了我遇到的相同问题的另一个示例。
  • 如果我理解,请使用带步骤的切片? my_list[2,8,5]
  • @aws_apprentice 这也是我认为我应该做的,但我很困惑为什么会出现列表索引错误。

标签: python list python-3.x


【解决方案1】:

通常我会为此使用operator.itemgetter

>>> my_list = list(range(10))
>>> import operator
>>> list(operator.itemgetter(2, 7)(my_list))
[2, 7]

它还允许通过索引获取任意数量的列表元素。


但是,您始终可以使用 NumPy(这是一个外部包),它是整数切片(但它不适用于普通 Python lists,仅适用于 NumPy 数组):

>>> import numpy as np
>>> my_arr = np.array(my_list)
>>> my_arr[[2, 7]]
array([2, 7])

【讨论】:

    【解决方案2】:
    In [1]: myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    In [2]: myList[2:8:5]
    Out[2]: [2, 7]
    

    myList[start:end:stride]

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多