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