为什么从此脚本创建的for循环删除所有元素而不是指定的索引?

问题描述 投票:0回答:2

现在我正在做一个涉及用户填充字符串值的列表的练习。列表已生成,包含5个不同值的长度。这是创建上述列表的代码。

make_list = []

for x in range(5):
    x = input('Please give me some random words: ')

在单词之后,我想为Python脚本做的是删除该列表中的第0,第4和第5个元素。完成后,我只剩下创建的列表中的两个单词。这是我创建的代码的一部分。

def new_list(alist):
    for x in range(len(alist)):
        if x == 0 or x == 3 or x == 4:
            alist.pop(x)

    return alist

然后我使用上面创建的列表调用该函数。

print(new_list([make_list]))

我总是在pycharm上得到的只是一个显示的空列表。 []

我在下面写的整个脚本中究竟错过了什么导致整个事件弹出/删除所有列表而不是指定的索引。

  make_list = []

for x in range(5):
    x = input('Please give me some random words: ')

def new_list(alist):
    for x in range(len(alist)):
        if x == 0 or x == 3 or x == 4:
            alist.pop(x)

    return alist

print(new_list([make_list]))

编辑

仍然得到那个空列表的事情。这是我输入的更新代码。

make_list = []

for x in range(5):
    x = input('Please give me some random words: ')
    make_list.append(x)

def new_list(alist):
    for x in range(len(alist)):
        if alist.index(alist[x]) == 0  or alist.index(alist[x]) == 3 or alist.index(alist[x]) == 4:
            alist.remove(alist[x])

    return alist

print(new_list([make_list]))
python list for-loop indexing
2个回答
1
投票

这是为输出创建另一个列表的可能解决方案。

make_list = []

for x in range(5):
    make_list.append(input('Please give me some random words: '))

def new_list(alist):
    out_list = []
    for i, x in enumerate(alist):
        if i not in [0, 3, 4]:
            out_list.append(x)

    return out_list

print(new_list(make_list))

enter image description here

可能你得到一个空列表的事实是,当'alist'被缩短时,索引指向与你期望的不同的条目。对此类问题的简单解决方案是创建另一个列表并在迭代期间保持输入列表不变。对于dicts和其他mutable也应如此。


0
投票

您缺少的是您使用列表作为另一个列表中的唯一项目来调用该函数。

print(new_list([make_list]))

这个其他列表就是你要回来的。有趣的是,你在编辑后再犯了这个错误。

在你解决了这个愚蠢的错误之后,你会遇到另一个错误。这个与列表的大小与要删除的索引有关。自己想一想,“我的列表中只剩下3个项目后,索引4是什么?”

要解决这个问题,你必须重新考虑你的方法 - 只需使用索引就不会再削减它了。

实际上我下面的other answer(来自Diego Sacconi)是解决这个问题的好方法。

© www.soinside.com 2019 - 2024. All rights reserved.