我如何维护列表中的唯一项目从而解决这个问题?
How do I maintain unique items in a list thereby solving this problem?
我需要创建一个提供解决方案的程序:
1
3 2
6 5 4
10 9 8 7
使用 python。
三个多星期以来,我一直在尝试不同的想法,但我找不到解决方案。
我被允许使用的所有代码 functions/commands 都已在以下尝试中使用。
各种尝试包括:
第一段代码显示了一些承诺,但它一直在 x 列表中获取重复项。
#Attempt 1
n=4
l = [0, 1, 2, 3, 4]
x = [0]
for i in range (0, n+1):
k = 0
j = i
while k <= i and j != x[j-1]:
j += l[k]
print (j, end = " ")
x.append(j)
while j != i and j != x[j-1]:
j -= 1
if j > i:
print (j, end = " ")
x.append(j)
print (x)
k+=1
#Attempt 2
n = 4
print (1)
for a in range (2, n):
for i in range (2, n*2, a):
j = i
j+=i-1
print (j, end =" ")
while j>i:
j-=1
print (j, end= " ")
print ()
#Attempt 3
n = 4
l = [1, 2, 3, 4]
for i in range (0, n):
for j in range (0, n*3, l[i]):
while j >= i:
print (j, end = " ")
j-=1
print ()
输出应该是
1
3 2
6 5 4
10 9 8 7
以某种形式,但我从来没有得到它。
如果您不想要重复的值,您应该在 x
变量上使用 set()
而不是 list()
。
如果您只是想获得那个特定的输出,只知道 n
的值,那么您可以这样做:
n = 8
numbers = range(1, n * (n + 1) // 2 + 1)
for i in range(1, n + 1):
head, numbers = numbers[:i], numbers[i:]
print(*reversed(head))
输出
> python3 test.py
1
3 2
6 5 4
10 9 8 7
15 14 13 12 11
21 20 19 18 17 16
28 27 26 25 24 23 22
36 35 34 33 32 31 30 29
>
或者这个问题还有更多我没有得到的吗?
cdlane 给出的答案更像pythonic。这是简化版(学校项目)。
n = 4
for i in range(1, n+1):
max_num_in_line = i * (i+1)// 2 # this gives max number to be printed in line i
for j in range(i): # here i is the total numbers to be printed in a line.
print(max_num_in_line, end=' ')
max_num_in_line -= 1
print()
我需要创建一个提供解决方案的程序:
1
3 2
6 5 4
10 9 8 7
使用 python。
三个多星期以来,我一直在尝试不同的想法,但我找不到解决方案。 我被允许使用的所有代码 functions/commands 都已在以下尝试中使用。
各种尝试包括:
第一段代码显示了一些承诺,但它一直在 x 列表中获取重复项。
#Attempt 1
n=4
l = [0, 1, 2, 3, 4]
x = [0]
for i in range (0, n+1):
k = 0
j = i
while k <= i and j != x[j-1]:
j += l[k]
print (j, end = " ")
x.append(j)
while j != i and j != x[j-1]:
j -= 1
if j > i:
print (j, end = " ")
x.append(j)
print (x)
k+=1
#Attempt 2
n = 4
print (1)
for a in range (2, n):
for i in range (2, n*2, a):
j = i
j+=i-1
print (j, end =" ")
while j>i:
j-=1
print (j, end= " ")
print ()
#Attempt 3
n = 4
l = [1, 2, 3, 4]
for i in range (0, n):
for j in range (0, n*3, l[i]):
while j >= i:
print (j, end = " ")
j-=1
print ()
输出应该是
1
3 2
6 5 4
10 9 8 7
以某种形式,但我从来没有得到它。
如果您不想要重复的值,您应该在 x
变量上使用 set()
而不是 list()
。
如果您只是想获得那个特定的输出,只知道 n
的值,那么您可以这样做:
n = 8
numbers = range(1, n * (n + 1) // 2 + 1)
for i in range(1, n + 1):
head, numbers = numbers[:i], numbers[i:]
print(*reversed(head))
输出
> python3 test.py
1
3 2
6 5 4
10 9 8 7
15 14 13 12 11
21 20 19 18 17 16
28 27 26 25 24 23 22
36 35 34 33 32 31 30 29
>
或者这个问题还有更多我没有得到的吗?
cdlane 给出的答案更像pythonic。这是简化版(学校项目)。
n = 4
for i in range(1, n+1):
max_num_in_line = i * (i+1)// 2 # this gives max number to be printed in line i
for j in range(i): # here i is the total numbers to be printed in a line.
print(max_num_in_line, end=' ')
max_num_in_line -= 1
print()