Python命名元组切片

3
这是我的第一个问题...
如果我有一个如下的命名元组:
 FDResult = namedtuple('FDResult', ['S', 'Payoff', 'V'])

我有一个数组,其中包含类似于下面的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: 'list' object has no attribute 'S',请问有什么建议吗?

感谢您的帮助。


那不是切片的用途。切片是用来从一个集合中选择一定范围的索引(例如,l[-2:] 返回一个新列表,其中包含 l 的最后两个元素),它并不选择其成员的属性。 - millimoose
1
bla[:] 只是给你列表的一个副本。切片不会拔出元素的部分; 它只给你一些元素的子集。你需要一个列表推导式,就像 @wim 的答案中所示。 - Eevee
1个回答

6

我认为你需要一个列表推导式,例如:

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

当然,你可以在那里使用更通用的列表切片方法,例如 bla[1:-1:2]


2
最好使用for x in bla,你不需要创建副本。 - millimoose
据我所读,这个问题的整点意思是要使用切片,因此我保留了bla[:]中的切片,仅作为一个切片的一般示例(正如原始问题也使用了)。 - wim
1
据我所理解,整个问题在于对切片的基本理解上出现了误解。(因为在这里它完全没有作用。) - millimoose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接