在Python中反转列表的特定部分
我正在尝试编写一个函数,它将接收一个列表,并返回一个包含偶数和奇数索引之间的反转元素的列表。例如: 知识产权:[1,2,3,4] 作品:[2,1,4,3] 我不明白为什么会出现在Python中反转列表的特定部分,python,list,slice,Python,List,Slice,我正在尝试编写一个函数,它将接收一个列表,并返回一个包含偶数和奇数索引之间的反转元素的列表。例如: 知识产权:[1,2,3,4] 作品:[2,1,4,3] 我不明白为什么会出现索引器错误:列表索引超出范围错误,代码如下: def mixed(list): x = 0 y = 2 l = [] for element in list: mod_list = list[x:y] l.append(mod_list[1]) l.append(mod_l
索引器错误:列表索引超出范围
错误,代码如下:
def mixed(list):
x = 0
y = 2
l = []
for element in list:
mod_list = list[x:y]
l.append(mod_list[1])
l.append(mod_list[0]
x += 2
y += 2
return l
l.append(mod_liste[1])
似乎是个问题……您可以使用内置函数和切片来实现:
from itertools import chain
L = [1,2,3,4]
list(chain(*zip(L[1::2],L[::2]))) # [2,1,4,3]
您可以为此使用内置函数和切片:
from itertools import chain
L = [1,2,3,4]
list(chain(*zip(L[1::2],L[::2]))) # [2,1,4,3]
如果您不想使用内置函数。当y大于列表长度时,只需停止循环。检查单数
def mixed(list):
x = 0
y = 2
l = []
for element in list:
mod_list = list[x:y]
l.append(mod_list[1])
l.append(mod_list[0])
x += 2
y += 2
if y > list.__len__() and list.__len__()%2 == 0:
break
elif y > list.__len__() and list.__len__()%2 != 0:
l.append(list[y-2])
break
return l
如果您不想使用内置函数。当y大于列表长度时,只需停止循环。检查单数
def mixed(list):
x = 0
y = 2
l = []
for element in list:
mod_list = list[x:y]
l.append(mod_list[1])
l.append(mod_list[0])
x += 2
y += 2
if y > list.__len__() and list.__len__()%2 == 0:
break
elif y > list.__len__() and list.__len__()%2 != 0:
l.append(list[y-2])
break
return l
你想要这样的结局吗:[2,1,4,3]?是的!为了清楚起见,我将编辑@uzair for循环将进行多少次迭代(如果没有错误发生)以及迭代后x和y将具有哪个值?正确,但您的循环正在迭代
len(list)
次……另外,不要对变量使用内置类型名(list
);你覆盖了它们的功能,使它们无法使用。你想要这样的最终结果吗:[2,1,4,3]?是的!为了清楚起见,我将编辑@uzair for循环将进行多少次迭代(如果没有错误发生)以及迭代后x和y将具有哪个值?正确,但您的循环正在迭代len(list)
次……另外,不要对变量使用内置类型名(list
);您覆盖了它们的功能并使其不可用。请注意,如果列表长度为奇数,则此操作将不起作用(但您自己的解决方案也不起作用,并且也不清楚是否应支持此情况以及输出结果是什么…)兄弟,我不会处理奇数长度的列表。你也需要对奇数列表进行一点修正。请注意,如果你的列表有奇数长度,这将不起作用(但你自己的解决方案也不起作用,而且也不清楚是否应该支持这种情况,以及输出应该是什么…)兄弟,我不会处理奇数长度的列表。你也需要对奇数列表进行一些修复。使用丑陋的列表有什么用呢?
而不是普通的列表
?两者都是一样的。根据python文档,len()方法总是有效的。使用丑陋的列表是怎么回事?
而不是普通的len(列表)
?两者都是一样的。根据python文档的说法,_len__()方法总是有效的。