【问题标题】:Reverse a specific slice of a list in Python在 Python 中反转列表的特定部分
【发布时间】:2021-05-04 01:26:02
【问题描述】:

我正在尝试编写一个函数,该函数将接收一个列表并返回一个包含偶数和奇数索引之间的倒置元素的列表。例如:

IP : [1,2,3,4]

操作:[2,1,4,3]

我不明白为什么会收到 IndexError: list index out of range 错误,代码如下:

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]) 似乎是问题所在......

【问题讨论】:

  • 你想要像这样的最终结果 OP : [2,1,4,3] 吗?
  • 是的!为了清楚起见,我将进行编辑@Uzair
  • for循环将进行多少次迭代(如果没有发生错误)以及迭代后x和y的值是多少?
  • 正确,但您的循环正在迭代 len(list) 次...
  • 顺便说一句,不要对变量使用内置类型名称 (list);您覆盖了它们的功能并使它们无法使用。

标签: python list slice


【解决方案1】:

您可以为此使用内置函数和切片:

from itertools import chain

L = [1,2,3,4]
list(chain(*zip(L[1::2],L[::2]))) # [2,1,4,3]

【讨论】:

  • 请注意,如果您的列表长度为奇数,这将不起作用(但您自己的解决方案也没有,并且不清楚是否应该支持这种情况以及应该输出什么...... )
  • 兄弟,我不会处理 ODD 长度的列表。
  • 您也需要对 ODD 列表进行一些修复。
【解决方案2】:

如果您不想使用内置功能。当 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

【讨论】:

  • 用丑陋的list.__len__() 代替普通的len(list) 有什么问题?
  • 两者相同。根据 python 文档, __len__() 方法总是有效的。
猜你喜欢
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 2014-03-19
  • 1970-01-01
  • 2018-08-26
相关资源
最近更新 更多