好的,所以我试图以 pythonic 的方式解决这个逻辑问题,但我不是很好。开始:
你有一张纸,上面有一个数字列表,如下所示:
1 2 3 4 | 5 6 7 8
如果你把纸从中间从左到右折叠,你会得到这个顺序:
(第一个数字在顶部) (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]] (从左到右折叠)。但现在我被困住了。我一直在尝试找出一种方法来使用列表理解将逻辑应用于 final_list 结果,因此我可以再次“折叠”论文以获得 [[5,4,1,8], [6 ,3,2,7]](再次从左向右折叠,或者如果从右向左折叠 [[8,1,4,5], [7,2,3,6]])。
我不确定如何使用列表推导来执行我在 for 循环中所做的事情,在列表列表上并生成列表列表。有什么想法可以让我开始吗?