-1

在教程视频中,我正在观看 for 循环中使用的范围是“范围(len(l))”,它成功地反转了列表。

但我想简单地加上“ l ”就可以解决这个问题,但没有人可以告诉我为什么会这样?

def reversed_list(l):
    rev = []
    for i in l:
        l_popped = l.pop()
        rev.append(l_popped)
    return rev
SAMPLE_LIST = [1,2,3,4]     

print(reversed_list(SAMPLE_LIST))

OUTPUT:
[4, 3]
4

3 回答 3

1

我不确定您观看的教程做了什么,但range(len(_))不会反转,它只是创建一个range列表大小的,从 0 开始。

如果要在 Python 中反转列表,只需使用内置函数reversed

l = list("hello")
print(list(reversed(l)))  # at list to have an actual list as opposed to an iterator
# ['o', 'l', 'l', 'e', 'h']
print(range(len(l)))
# range(0, 5)

PS:您的解决方案不起作用的原因是您正在使用pop. 一个简单的调试方法是添加一个打印语句:

def reversed_list(l):
    rev = []
    for i in l:
        print("This is l:", l)
        l_popped = l.pop()
        rev.append(l_popped)
    return rev

print(reversed_list([1,2,3,4]))
# This is l: [1, 2, 3, 4]
# This is l: [1, 2, 3]
# [4, 3]

于 2021-07-11T12:42:26.263 回答
0

这个循环是问题的根本原因。

for i in l:
        l_popped = l.pop()
        rev.append(l_popped)
    return rev

让我们尝试空运行。
当 i = 1(索引 0)时,弹出 4 并且 rev = [4],l = [1, 2, 3]
当 i = 2(索引 1)时,弹出 3 并且 rev = [4, 3],l = [1, 2]
现在,索引跨越了 l 的长度,因此不会执行对剩余元素的操作。

于 2021-07-11T12:46:37.777 回答
0

如果你真的想用来pop反转一个列表,你可以做一个原始列表的浅拷贝。每次迭代,列表的长度都会减少

>>> x=[1,2,3,4]
>>> z=x.copy()
>>> y=[x.pop(i) for i in range(len(z)-1,-1,-1)]
>>> y
[4, 3, 2, 1]
于 2021-07-11T12:47:05.533 回答