oldlist=['a','b','c']
print newlist=[(lambda x : x+x )(x) for x in oldlist ]
# Result: ['aa', 'bb', 'cc']
现在我希望输出如下:
newlist=['1a','2b','3c']
希望我想用lambda这样做:
idx=1
newlist=[(lambda x : str(idx)+x ; idx+=1)(x) for x in oldlist ]
但是我不允许在lambda中使用多行表达式。那么如何在lambda中增加 idx ?
答案 0 :(得分:3)
您根本不需要使用>>> oldlist = ['a','b','c']
>>> enumerate(oldlist)
<enumerate object at 0x7f5e58a455f0>
>>> list(enumerate(oldlist)) # default start = 0
[(0, 'a'), (1, 'b'), (2, 'c')]
>>> list(enumerate(oldlist, 1)) # explicitly specify `start`
[(1, 'a'), (2, 'b'), (3, 'c')]
。
使用enumerate
:
>>> oldlist = ['a','b','c']
>>> [str(i) + x for i, x in enumerate(oldlist, 1)]
['1a', '2b', '3c']
>>> import itertools
>>> it = itertools.count(1) # yield 1, 2, 3, ... infinitely.
>>> next(it)
1
>>> next(it)
2
或者,您可以将next
与itertools.count
迭代器:
>>> import itertools
>>> it = itertools.count(1)
>>> [str(next(it)) + x for x in oldlist]
['1a', '2b', '3c']
output1.csv
答案 1 :(得分:1)
你不能在lambda
内增加,你必须从外面传递递增的值(如果必须使用lambda,因为@falsetru建议不需要lambda)。使用enumerate
并将索引传递给lambda
。
newlist=[(lambda idx, x : str(idx)+x)(idx, x) for (idx, x) in enumerate(oldlist, 1) ]
答案 2 :(得分:0)
为什么不简单地将 btnCancel.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View view)
{
// user actions
stopTimeout();
}
});
与标准python列表定义一起使用:
enumerate