访问列表理解中的先前元素

时间:2014-01-20 23:22:01

标签: python list-comprehension

我已经在这里查看了列表推导,并且可以找到解决方案。

最近我来的是在列表理解中迭代时使用enumerate()建议的问题。

我想要做的是访问列表理解中的先前元素。 The context is this question on another StackExchange site

基本上,如果我从stdin - 4,6,+2,+8获取此字符串,我想输出数字的整数,或者数字加上先前元素的值。在给定的情况下,最终的数组是:4,6,8,16 - 或4,6,6+2,(6+2)+8。使用数组从左到右依次进行循环,但是我很想知道是否可以在单个列表理解中完成。

至于我所拥有的:

from sys import*
s=argv[1].split(',')
for i in range(len(s)):
 s[i]=eval(`s[i-1]`*(s[i][0]=='+')+s[i])
print s

打印正确的结果,但以下列表理解不会:

s=argv[1].split(',')
s=[eval(s[i-1]*(x[0]=='+')+x) for i,x in enumerate(s)]
print s

结果是:

[4, 6, 8, 10]

这对4, 6, +2+6, +2+8来说是方便的。

我最终能够做到的是:

s=[eval(PRIOR_VALUE*(x[0]=='+')+x) for x in argv[1].split(',')]

那么我可以在同一列表推导中轻松访问列表推导的先前计算元素吗?

1 个答案:

答案 0 :(得分:2)

  

那么我可以在同一列表推导中轻松访问列表推导的先前计算元素吗?

容易吗?否。

如果你想让自己变得困难,有很多方法可以在列表理解中保存状态信息。例如,

prev = [None]

s = [prev.__setitem__(0, val) or val
     for item in list
     for val in [something(item, prev[0])]]

这不是一个好主意。