我正在解决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
循环来遍历这个新序列。我将太长而且效率低下。有人能让我知道如何处理这个问题吗?
答案 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]
。