因此,我试图以int形式定义一个接收到的字符串,从而导致以列表形式添加导致给定字符串的数字
例如,当n = 3
返回的字符串应为:
"1+2+3+..1+2+3+..1+2+3+.."
我的尝试
def nestedAdditions(n):
string = ""
for i in range(1,n+1):
for j in range(1,i+1):
string += str(j)+"+"
string += ".."
return(string)
答案 0 :(得分:3)
您在内部循环中从1
到i+1
的错误计数,而应使用n+1
。外循环终止后,您还错误地附加了..
。试试这个:
def nestedAdditions(n):
string = ""
for i in range(1,n+1):
for j in range(1,n+1):
string += str(j)+"+"
string += ".."
return(string)
然后
print(nestedAdditions(3))
应打印
1+2+3+..1+2+3+..1+2+3+..
答案 1 :(得分:1)
您可以使用另一种方法,但是对代码的更改最少,您在这里:
def nestedAdditions(n):
string = ""
for i in range(1,n+1):
# change to n
for j in range(1,n+1):
string += str(j)+"+"
# fix loop indentation
string += ".."
return(string)
答案 2 :(得分:1)
这是一个itertools方法:
import itertools as it
def iterAdditions(n):
item = list(it.accumulate([str(x) + '+' for x in range (1, n+1)]))
temp = item.pop() + '..'
return (temp * n)
给予iterAdditions(3)
:
'1+2+3+..1+2+3+..1+2+3+..'
它确实使速度比基本嵌套循环方法(上面@ Selcuk和Anatoliy)要快一些,尽管我不确定为什么:
timeit nestedAdditions(10)
20.2 µs ± 166 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
timeit iterAddition(10)
2.74 µs ± 21.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
答案 3 :(得分:1)
不需要嵌套循环;使用'+'.join
使字符串重复一次,然后将字符串乘以n
以重复该字符串。是的,您可以在Python中将字符串乘以数字。
def rep(n):
parts = [ str(i) for i in range(1, n+1) ]
parts.append('..')
s = '+'.join(parts)
return s * n
@neutrino_logic发布了运行时间,以便进行比较:
>>> timeit(lambda: rep(100), number=100000)
1.6885969130016747
>>> timeit(lambda: iterAdditions(100), number=100000)
2.435769292002078