使用lambda通过更改/修改旧列表来创建新列表

时间:2016-04-14 07:23:09

标签: python list lambda

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

3 个答案:

答案 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

或者,您可以将nextitertools.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