我已经在这里查看了列表推导,并且可以找到解决方案。
最近我来的是在列表理解中迭代时使用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(',')]
那么我可以在同一列表推导中轻松访问列表推导的先前计算元素吗?
答案 0 :(得分:2)
那么我可以在同一列表推导中轻松访问列表推导的先前计算元素吗?
容易吗?否。
如果你想让自己变得困难,有很多方法可以在列表理解中保存状态信息。例如,
prev = [None]
s = [prev.__setitem__(0, val) or val
for item in list
for val in [something(item, prev[0])]]
这不是一个好主意。