我有一个列表:test = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
需要使用 Python 标准库 以所有可能的方式增加每个列表元素。这是一项测试任务,我已经这样做了:
test = [elem + 1 for elem in test]
for i in range(len(test)): test[i] += 1
test = map(lambda x : x + 1, test)
test = [sum(elem) for elem in zip(test, [1]*len(test))]
还有其他想法吗?
最佳答案
你可以使用递归,(你可以使用 True
和 False
而不是 1
和 0
,但这只是胡说八道):
def recurseadd(test):
if test:
return [test[False] + True] + recurseadd(test[True:])
else:
return test
您可以使用
+
代替 [test[0] + 1].extend(recurseadd(test[1:]))
。如果需要,您可以使用
operator.add
而不是 +
,使用 functools.partial
和 itertools.imap
:from functools import partial
from operator import add
from itertools import imap
addone = partial(add, 1)
test = list(imap(addone, test)) # don't really use imap if you want a list
您可以使用
itertools
的 izip
和 repeat
:test = [sum(elem) for elem in izip(test, repeat(1))]
sum
的另一种方法,灵感来自 Eren 对 GWW 回答的评论:test = sum(([x+1] for x in test), [])
你可以使用
xrange
而不是 range
,你可以使用 itertools.count(1).next()
来生成 1
s...有无数次要变化,但您的三个加上递归版本似乎涵盖了基本的变化。 Eren的reduce版本也不错。
关于python - 以所有可能的方式增加每个列表元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7272643/