Python 将错误值追加到另一个列表中时出现问题

Python 将错误值追加到另一个列表中时出现问题,python,Python,现在,我正在进行一个python练习,该练习将返回嵌套列表中的中间值,并形成一个新的嵌套列表: peel_layer_off([ ["a", "b", "c", "d"], ["e", "f", "g", "h"], ["i", "j", "k", "l&q

现在,我正在进行一个python练习,该练习将返回嵌套列表中的中间值,并形成一个新的嵌套列表:

peel_layer_off([
  ["a", "b", "c", "d"],
  ["e", "f", "g", "h"],
  ["i", "j", "k", "l"],
  ["m", "n", "o", "p"]
]) ➞ [
  ["f", "g"],
  ["j", "k"]
]

peel_layer_off([
  [True, False, True],
  [False, False, True],
  [True, True, True]
]) ➞ [[False]]

我想做的是形成一个嵌套循环,返回一个列表,其中包含子列表中间的所有元素,并附加到主列表:

def peel_layer_off(lst):
    returnlist = []
    for x in lst:
        z = [y for y in x if x.index(y) > 0 and x.index(y) < len(x) - 1]
        returnlist.append(z)

    return returnlist[1:len(returnlist) - 1]

print(peel_layer_off([
  [True, False, True],
  [False, False, True],
  [True, True, True]
])
) 
对于第一个示例,测试通过了。 但是,对于第二个示例,我得到的是[[],而不是[[False]]

我能知道这是为什么吗?如果我真的需要将所有虚假值返回到列表中,我能做什么? 谢谢你的帮助

将剥离层更改为以下内容:

def peel_layer_off(lst):
    returnlist = []
    for x in lst:
        z = x[1 : -1]
        returnlist.append(z)

    return returnlist[1 : -1]
您可以编写returnlist[1:-1],而不是returnlist[1:lenreturnlist-1]。 for循环中x的整个子集可以等效地简化。 更好的方法是使用列表理解而不是for循环:


…这也可以写为一行,不带临时变量ret,但要以可读性为代价。

您的问题是您正在使用.index。不要这样做,第一种方法是错误的,因为它给出了列表中给定值的第一个索引,第二种方法是在循环中获取索引的一种非常低效的方法。但是您应该像以前一样使用切片,[sub[1:-1]用于数据[1:-1]]@juanpa.arrivillaga谢谢您的回复。但是对于.index,您说过它会给您列表中给定值的第一个索引-因为我还是Python新手,您能解释一下吗?[1,2,3,1].index1将始终返回0。但是,当您在列表上进行迭代时,在最后一项,最后一个1处,您需要它返回3,但它将始终为您提供0 Rodolph它工作正常,谢谢!但是仍然想知道,为什么我们可以用切片方法得到正确的值,而用原始转储方法得到错误的值?@PakHangLeung在你的问题下看到了Juan的答案。
def peel_layer_off(lst):
    ret = [x[1 : -1] for x in lst]
    return ret[1 : -1]