现在我正在进行涉及用户填充字符串值的列表的练习。列表已生成,包含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]))
答案 0 :(得分: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))
可能你得到一个空列表的事实是,当'alist'被缩短时,索引指向与你期望的不同的条目。对此类问题的简单解决方案是创建另一个列表并在迭代期间保持输入列表不变。对于dicts和其他变体也应如此。
答案 1 :(得分:0)
您缺少的是您正在使用列表作为另一个列表中的唯一项目来调用该函数。
print(new_list([make_list]))
这个其他列表就是你要回来的。 有趣的是,你在编辑后再犯了这个错误。
在你解决了这个愚蠢的错误后,你会遇到另一个错误。这个与列表的大小与要删除的索引有关。想想你自己," 在我的列表中只剩下3个项目后,什么是索引4?"
要解决这个问题,你必须重新考虑你的方法 - 只需使用指数就不会再削减它了。
实际上我的other answer(来自Diego Sacconi
)是解决此问题的好方法。