2013-01-15 43 views
3

这是我的第一个问题在这里...Python的namedtuple片

,如果我有一个像下面

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

一个namedtuple和我有了namedtuple像下面

集合的阵列
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的: '名单' 对象有没有属性 'S' ......

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

+0

这不是什么切片。切片从一个集合中选择一系列索引(例如,'l [-2:]'返回一个新列表和'l'的最后两个元素),它不会从其成员中选择属性。 – millimoose

+1

'bla [:]'只是给你一份清单的副本。切片不会挖出部分元素;它只给你一些元素的子集。你需要一个列表理解,就像在@ wim的答案中一样。 – Eevee

回答

6

我想你想一个list comprehension,例如

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

当然,你可以在那里代替你的列表更一般的片,例如bla[1:-1:2]

+2

不妨是'for x in bla',你不需要创建一个副本。 – millimoose

+0

当我读到这个问题的时候,这个问题的关键就是使用_slice_,所以我用'bla [:]'作为片的一个通用示例(就像OP也使用过的那样)。 – wim

+1

当我阅读它时,整个观点是对片的功能的基本误解。 (看来这里完全没用) – millimoose