【问题标题】:Python namedtuple slicePython 命名元组切片
【发布时间】:2013-01-15 02:16:23
【问题描述】:

这是我的第一个问题......

如果我有一个像下面这样的命名元组

 FDResult = namedtuple('FDResult', ['S', 'Payoff', 'V'])

我有一个数组,其中包含如下所示的命名元组集合

 bla = [FDResult(S=100.0, Payoff=0.0, V=0.4693541525097441),
 FDResult(S=102.0, Payoff=1.0, V=0.4944046100897207),
 FDResult(S=104.0, Payoff=1.0, V=0.5188897967596792),
 FDResult(S=106.0, Payoff=1.0, V=0.5427339609362274),
 FDResult(S=108.0, Payoff=1.0, V=0.5658731041633024)]

如何获得 S 的数组切片?

 bla[:].S #I want to get [100.0,102.0,104.0,...] as a result

这不适用于错误:AttributeError: 'list' object has no attribute 'S'...

任何建议表示赞赏。 谢谢。

【问题讨论】:

  • 这不是切片的用途。切片从一个集合中选择一系列索引(例如,l[-2:] 返回一个包含l 的最后两个元素的新列表),它不会从其成员中选择属性。
  • bla[:] 只是给你一份列表的副本。切片不会取出部分元素;它只给你一些元素的子集。你想要一个列表理解,就像@wim 的回答一样。

标签: python arrays namedtuple


【解决方案1】:

我想你想要一个list comprehension,例如

[x.S for x in bla[:]]

您当然可以在其中替换列表中更通用的部分,例如bla[1:-1:2].

【讨论】:

  • 也可以是for x in bla,不需要创建副本。
  • 当我读到它时,这个问题的重点是使用 slice,所以我留下了切片,bla[:] 只是切片的一般示例(作为 OP 也使用)。
  • 当我读到它时,整个观点是对切片功能的基本误解。 (看来这里完全没用。)
  • 是的,这就是我想要的。谢谢。
猜你喜欢
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 2016-02-23
相关资源
最近更新 更多