用字母累积列表

时间:2017-07-24 23:14:02

标签: python python-3.x

我正在尝试修正一个累积列表的代码。 到目前为止我已经找到的代码确实如此,但我想让它与字母一起工作,例如 累积(“a”,“b”,“c”) 会成为a,ab,abc。

/>

3 个答案:

答案 0 :(得分:2)

如果你想让它与字符串一起使用,你必须用空字符串初始化它

def accumulate(*args):
    theSum = ''
    for i in args:
        theSum += i  # we can here shorten it to += (kudos to @ChristianDean)
        print(theSum)
    return theSum

此外,如果您想使用任意数量的参数,则应使用*args(或*L)。

现在当然这将不再适用于数字。 theSum += i是{em> here theSum = theSum + i的缩写(因为字符串是不可变的)。但请注意, 总是如此:对于列表,例如存在差异。

现在打印:

>>> accumulate("a", "b", "c")
a
ab
abc
'abc'

最后'abc'不是print(..)语句的结果,而是return函数的accumulate

答案 1 :(得分:2)

你可以试试这个:

import string

l = string.ascii_lowercase

the_list = []

letter = ""

for i in l:
    letter += i
    the_list.append(letter)

使用生成器的功能更好:

def accumulation():
     l = string.ascii_lowercase
     letter = ""
     for i in l:
        letter += i
        yield letter

the_letters = list(accumulation())
print(the_letters)

输出:

['a', 'ab', 'abc', 'abcd', 'abcde', 'abcdef', 'abcdefg', 'abcdefgh', 'abcdefghi', 'abcdefghij', 'abcdefghijk', ...]

答案 2 :(得分:2)

虽然@WillemVanOnsem为您提供了可行的方法,但为了缩短您的代码,您可以使用标准库中的itertools.accumulate

>>> from itertools import accumulate
>>> 
>>> for step in accumulate(['a', 'b', 'c']):
    print(step)


a
ab
abc
>>>