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