如何使用嵌套的for循环返回字符串“ 1 + 2 + 3 + .. 1 + 2 + 3 + .. 1 + 2 + 3 + ..”?

时间:2019-11-19 02:42:11

标签: python-3.x

因此,我试图以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)

4 个答案:

答案 0 :(得分:3)

您在内部循环中从1i+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