【问题标题】:How to print multiple non-consecutive values from a list with Python 3.5.1如何使用 Python 3.5.1 从列表中打印多个非连续值
【发布时间】:2017-05-17 01:50:10
【问题描述】:

我创建了一个列表,并想从列表中选择一些要打印的项目。下面,我只想在索引 0 处打印“熊”,在索引 3 处打印“袋鼠”。我的语法不正确:

>>> animals = ['bear', 'python', 'peacock', 'kangaroo', 'whale', 'platypus']
>>> print (animals[0,3])

Traceback(最近一次调用最后一次):文件“”,第 1 行,in print (animals[0,3]) TypeError: 列表索引必须是整数 或切片,而不是元组

我尝试在索引之间使用空格,但仍然报错:

>>> print (animals[0, 3])

Traceback(最近一次调用最后一次):文件“”,第 1 行,in print (animals[0, 3]) TypeError: list indices must be 整数或切片,而不是元组

我可以打印单个值或 0-3 的范围,例如:

>>> print (animals [1:4])
['python', 'peacock', 'kangaroo']

如何打印多个不连续的列表元素?

【问题讨论】:

  • 不知道为什么你被否决了。对我来说似乎是一个合法的问题。

标签: python list python-3.x


【解决方案1】:
print(animals[0] + " " + animals[3] + " " + ...)

【讨论】:

  • 请避免仅使用代码的答案,并简要说明其工作原理。另外,这与几年前发布的其他答案有何不同?
  • 我怀疑这是否有帮助——甚至根本没有用。需要解释一下吗?
【解决方案2】:

默认情况下,Python 的列表类型不支持。返回一个切片对象,表示由 range(start, stop, step) 指定的索引集。

class slice(start, stop[, step])

>>>animals[0:5:2]
['bear', 'peacock', 'whale']

要么创建子类自己实现,要么间接获取指定值。例如:

>>>map(animals.__getitem__, [0,3])
['bear', 'kangaroo']

【讨论】:

    【解决方案3】:

    list(animals[x] for x in (0,3)) 是您想要的子集。与 numpy 数组不同,原生 Python 列表不接受列表作为索引。

    您需要将生成器表达式包装在list 中以打印它,因为它本身没有可接受的__str____repr__。您也可以使用str.join 以获得可接受的效果:', '.join(animals[x] for x in (0,3))

    【讨论】:

      【解决方案4】:

      要从列表中选择任意项目,您可以使用operator.itemgetter

      >>> from operator import itemgetter    
      >>> print(*itemgetter(0, 3)(animals))
      bear kangaroo
      >>> print(*itemgetter(0, 5, 3)(animals))
      bear platypus kangaroo
      

      【讨论】:

      • 如果您将单个索引传递给itemgetter,这将失败,因为它会直接返回索引处的值而不将其包含在元组中。
      • 星星的目的是什么?用星号尝试这个示例对我来说会产生语法错误,但是当我删除它时,代码可以工作。
      • @Rawrcasm 可能是因为您使用的是 Python 2.7?
      【解决方案5】:

      Python 的 list 类型不支持使用 animals[0,3] 中的元组进行切片。如果您想要某些任意值,则必须单独索引它们。

      print(animals[0], animals[3])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-11
        • 1970-01-01
        • 2022-06-10
        • 2019-08-27
        • 2016-01-10
        • 2019-12-01
        相关资源
        最近更新 更多