N循环克隆第一个字符串,然后移动到数组的末尾
name = ["A" , "B", "C"]
这里有一种通过编写递归函数来完成这项工作的优雅方法:
def f(N, n, result):
if n == 0:
return result[-1]
else:
return f(N, n - 1, result[1:] + [result[0]] * N)
def g(N, n, result):
for _ in range(n):
result = result[1:] + list(result[0]) * N
return result[-1]
N = 2
print("N: " + str(N))
for n in range(1, 3):
result = "".join(f(N, n, ["A" , "B", "C"]))
last = result[-1]
print("_" * 5)
print("n: " + str(n))
print("Result: " + str(result))
print("Last: " + str(last))
这里的结果:
N: 2
_____
n: 1
Result: BCAA
Last: A
_____
n: 2
Result: CAABB
Last: B
这个方法(f(比另一个答案(g(慢得多,如果在我的计算机上n超过997,你会受到python递归深度的限制。您可以使用sys.setrecursionlimit(xxx)
进行更改
时间比较:
- f:对于从1到997:
2.130194664001465 s
的n - g: 对于从1到997:
1.02400803565979 s
的n
试试这个代码:
def my_func() :
name = ["A" , "B", "C"]
value = input("Number of n : ")
value = int(value)
for n in range(0, value):
name = name[1:] + list(name[0]) * 2
print(name)
return name[-1]
print(my_func())
输出:
Number of n : 2
['B', 'C', 'A', 'A']
['C', 'A', 'A', 'B', 'B']
B
也许能帮到你!
name = ["A" , "B", "C"]
def my_func() :
value = input("Number of n : ")
value = int(value)
for i in range(value):
# get first element then remove
first_element = name.pop(0)
# move to then end list name
name.extend([first_element,first_element])
# print current list name
print(name)
#print last name
print(name[-1])
测试用例:
Number of n : 2
['B', 'C', 'A', 'A']
['C', 'A', 'A', 'B', 'B']
B
Number of n : 3
['B', 'C', 'A', 'A']
['C', 'A', 'A', 'B', 'B']
['A', 'A', 'B', 'B', 'C', 'C']
C