解决折纸难题

2024-06-01 08:37:47 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我试着用Python的方式来解决这个逻辑问题,但我不是很好。接下来是:

你有一张纸,上面有一张数字列表,如下所示:

1247平方英寸

如果您从左到右从中间向下折叠纸张,您将得到以下顺序:

(第一个数字在上面) (4,5)(3,6)(2,7)(1,8)

你可以再折叠一次,得到一个新的顺序(从右到左的例子):

(第一个数字在上面,然后第二个在下面,…等等) (8,1,4,5)(7,2,3,6)

我从如何折叠纸张开始,得到一份按正确顺序排列的列表:

paper = [1, 2, 3, 4, 5, 6, 7, 8]

half_paper = len(paper)/2
s = paper[:half_paper]
e = paper[half_paper:]
middle_distance = 0

final_list = []

for l in range(half_paper):
    print l
    m = [s[half_paper-middle_distance-1],e[middle_distance-half_paper]]
    final_list.append(m)     
    middle_distance += 1

 print final_list

这样可以得到[[4,5]、[3,6]、[2,7]、[1,8]](从左向右折叠)。但现在我被卡住了。我一直在试图找到一种方法来使用列表理解来将逻辑应用到最终的列表结果上,这样我就可以再次“折叠”这篇文章,得到[[5,4,1,8],[6,3,2,7]](再从左向右折叠,或者如果从右向左折叠[[8,1,4,5],[7,2,3,6]])。在

我不知道如何使用列表理解来执行我在for循环中对列表列表所做的操作,并生成一个列表列表。有什么办法让我开始吗?在


Tags: middle列表for顺序方式数字逻辑list
1条回答
网友
1楼 · 发布于 2024-06-01 08:37:47
l = [1, 2, 3, 4, 5, 6, 7, 8]
l1,l2 = l[:len(l)/2], l[len(l)/2:]
l = [ [x,y] for x,y in zip (l1, l2[::-1])]
for i in range(len(l)):
        if isinstance(l[i][0], list):
                l[i] = [x for item in l[i] for x in item]
print l

l1,l2 = l[:len(l)/2], l[len(l)/2:]
l = [ [x,y] for x,y in zip (l1, l2[::-1])]
for i in range(len(l)):
        if isinstance(l[i][0], list):
                l[i] = [x for item in l[i] for x in item]
print l

输出

^{pr2}$

相关问题 更多 >