Python 列表删除
Python list delete
我的程序,我想从列表中删除一些项目:
num_str = input('Enter a number: ')
num_num = int(num_str)
fac_list = list(range(1, num_num + 1))
print("BEFORE: ", fac_list)
for item in fac_list:
if num_num % item == 0:
fac_list.remove(item)
print("AFTER: ",fac_list)
输出:
Enter a number: 8
BEFORE: [1, 2, 3, 4, 5, 6, 7, 8]
AFTER: [2, 3, 5, 6, 7]
应该是:
[3, 5, 6, 7]
怎么了?
您正在遍历 list
并将其删除,这与您希望的方式不符。这是因为当您迭代列表时,for 循环会跟踪您当前所在的索引,但是当您从列表中删除一个项目时,索引会发生变化,因此您最终可以跳过对某些元素的迭代。
您可以只创建一个包含所需值的新列表(而不是从旧列表中删除),这可以使用列表理解来完成 -
fac_list[:] = [x for x in fac_list if num_num % x != 0:]
左边的切片符号是为了原地做这个,所以fac_list
就地改变了。
如果你想删除(而不是创建一个新列表),你应该遍历它的副本,示例 -
for item in fac_list[:]:
if num_num % item == 0:
fac_list.remove(item)
我没有尝试过 Anand S Kumar 的解决方案,但是您可以向后遍历它,而不是生成一个新列表,这样当您删除项目时,它不会影响您将遍历的索引。
num_str = input('Enter a number: ')
num_num = int(num_str)
fac_list = list(range(1, num_num + 1))
print("BEFORE: ", fac_list)
for i in range(len(fac_list)-1, -1, -1): # Iterate backwards instead
item = fac_list[i]
if num_num % item == 0:
fac_list.remove(item)
print("AFTER: ",fac_list)
输出:
('AFTER: ', [3, 5, 6, 7])
我的程序,我想从列表中删除一些项目:
num_str = input('Enter a number: ')
num_num = int(num_str)
fac_list = list(range(1, num_num + 1))
print("BEFORE: ", fac_list)
for item in fac_list:
if num_num % item == 0:
fac_list.remove(item)
print("AFTER: ",fac_list)
输出:
Enter a number: 8
BEFORE: [1, 2, 3, 4, 5, 6, 7, 8]
AFTER: [2, 3, 5, 6, 7]
应该是:
[3, 5, 6, 7]
怎么了?
您正在遍历 list
并将其删除,这与您希望的方式不符。这是因为当您迭代列表时,for 循环会跟踪您当前所在的索引,但是当您从列表中删除一个项目时,索引会发生变化,因此您最终可以跳过对某些元素的迭代。
您可以只创建一个包含所需值的新列表(而不是从旧列表中删除),这可以使用列表理解来完成 -
fac_list[:] = [x for x in fac_list if num_num % x != 0:]
左边的切片符号是为了原地做这个,所以fac_list
就地改变了。
如果你想删除(而不是创建一个新列表),你应该遍历它的副本,示例 -
for item in fac_list[:]:
if num_num % item == 0:
fac_list.remove(item)
我没有尝试过 Anand S Kumar 的解决方案,但是您可以向后遍历它,而不是生成一个新列表,这样当您删除项目时,它不会影响您将遍历的索引。
num_str = input('Enter a number: ')
num_num = int(num_str)
fac_list = list(range(1, num_num + 1))
print("BEFORE: ", fac_list)
for i in range(len(fac_list)-1, -1, -1): # Iterate backwards instead
item = fac_list[i]
if num_num % item == 0:
fac_list.remove(item)
print("AFTER: ",fac_list)
输出:
('AFTER: ', [3, 5, 6, 7])