Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的序列开关_Python - Fatal编程技术网

python中的序列开关

python中的序列开关,python,Python,我正在用Python解决一个问题 一般的想法是,给定一个数字序列,然后根据规则从这个序列中挑选出数字,然后这个挑选出的数字形成一个新的列表 步骤1,在奇数位置(从零开始的位置计数)中选择数字,并附加到新列表中 第二步,剩余的数字形成一个新的序列 第3步,在下一轮中,选择新序列的偶数位置中的数字,并附加到新列表中 第四步,在这一轮之后,剩余的数字形成一个新的序列 重复此步骤,直到原始序列中的所有编号都被挑选出来,以用于新列表 例如,给定一个序列[0,1,2,3,4,5,6,7,8] 第1步,在od

我正在用Python解决一个问题

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

步骤1,在
奇数
位置(从零开始的位置计数)中选择数字,并附加到新列表中

第二步,剩余的数字形成一个新的序列

第3步,在下一轮中,选择新序列的
偶数
位置中的数字,并附加到新列表中

第四步,在这一轮之后,剩余的数字形成一个新的序列

重复此步骤,直到原始序列中的所有编号都被挑选出来,以用于新列表

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

第1步,在
odd
position中选择数字,New_list=[1,3,5,7]

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

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

第四步,形成新序列的剩余数字是[2,6]

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


我不知道如何用Python实现它。我在第一步遇到了困难,我想在序列上使用
for
循环,并根据奇数或偶数索引选择数字。但是在选择了数字之后,顺序就改变了。然后,如果原始序列很长,我必须重新开始一个新的
,以便在这个新序列上循环。我会太长和效率低下的编码。有人能告诉我如何处理这个问题吗?

您可以使用切片
[1::2]
[0::2]
重复获取列表中的所有奇数/偶数元素。这里,
[X:Y:Z]
的意思是“从X开始,以Z的步长一直到Y”,如果其中任何一个是空的,比如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]

您可以使用带有步骤的切片,使用
lst[::2]
lst[1::2]
从所有偶数或奇数元素创建新元素。在
循环中交替使用
,直到什么都没有了。@tobias_k,谢谢。但问题是我需要循环的序列正在改变,因为每次剩余的数字形成一个新的序列。所以我不能在固定的序列上循环
lst
。这就是我的问题。这正是问题的关键:你不需要在序列上循环并选择/删除元素,每次你都要创建一个新的序列。非常感谢!