python中的序列切换

时间:2017-11-20 13:52:32

标签: python

我正在解决Python中的一个问题。

一般的想法是,给定一个数字序列,然后根据规则从这个序列中挑出数字,然后这个选择数字形成一个新的列表。

步骤1,挑选odd位置的数字(位置计数从零开始)并附加到新列表。

步骤2,其余数字形成一个新序列。

步骤3,在下一轮中,选出新序列even位置的数字,并附加到新列表中。

步骤4,在这一轮之后,剩余的数字形成一个新的序列。

重复此过程,直到原始序列中的所有数字都被挑选出来以获得新列表。

例如,给定序列[0,1,2,3,4,5,6,7,8],

步骤1,选出odd位置的数字,New_list = [1,3,5,7]

步骤2,剩余的数字形成一个新的序列是[0,2,4,6,8]

步骤3,挑选新序列even位置的数字,然后从新序列中挑选出数字[0,4,8],并附加到新列表中。然后New_list = [1,3,5,7,0,4,8]

步骤4,剩余数字形成一个新序列是[2,6]

重复步骤1,然后选择6追加到New_list = [1,3,5,7,8,4,8,6] 重复步骤2,然后选择2追加到New_list = [1,3,5,7,8,4,8,6,2],然后挑出原始列表中的所有数字。最终的结果是New_list。

我不知道如何在Python中实现它。我在第一步陷入困境,我想在序列上使用for循环,并根据奇数或偶数索引选择数字。但在挑选出数字后,序列会发生变化。然后,如果原始序列很长,我必须重新开始一个新的for循环来遍历这个新序列。我将太长而且效率低下。有人能让我知道如何处理这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以使用切片[1::2][0::2]重复获取列表中所有奇数/偶数元素。在这里,[X:Y:Z]表示"从X开始,直到Y为Z"步骤,如果其中任何一个为空,如Y,默认值为[0:len:1]。只需将奇数添加到新列表中,并保留偶数,反之亦然,直到列表为空。您可以使用计数器变量和模%来决定迭代的开始步骤。

lst = [0, 1, 2, 3, 4, 5, 6, 7, 8]
new, i = [], 1
while lst:
    new += lst[i%2::2]
    lst = lst[1-i%2::2]
    i += 1

之后,new[1, 3, 5, 7, 0, 4, 8, 6, 2]