如果元素是某个数字的倍数,则删除列表中的某些元素

时间:2015-11-18 08:06:43

标签: python

我想从列表中删除5的倍数的元素。 在我的代码“######”中,我尝试了>> number_list.pop(i)它显示索引超出范围错误。我也试过>>返回number_list.pop(i)并且它似乎只删除了第一个数字,即25个。在main()中的代码被给出,我需要完成该函数。我可以通过创建另一个列表并存储不是5的倍数的数字来轻松实现它,但是看起来我必须使用给定的列表“数字”来计算它。如果我能从这个编码中得到一些帮助,我将不胜感激。谢谢。

PS。使用python 3.5

def main():

    numbers = [25, 5, 9, 10, 15, 8]
    print(numbers)
    remove_multiples(numbers, 5) # remove multiples of 5
    print("Numbers left", numbers) 

def remove_multiples(number_list, multiples_of):


    for i in range(len(number_list)):
        if number_list[i] % multiples_of == 0:
            ################### 
    return number_list

main()

3 个答案:

答案 0 :(得分:1)

def remove_multiples(number_list, multiples_of):
    pivot = 0
    for i,value in enumerate(number_list):
        if value % multiples_of != 0:
            number_list[pivot] = value
            pivot += 1
    del number_list[pivot:]
    return number_list

将可用元素移到前面,然后删除其余元素

答案 1 :(得分:0)

def main():  
    numbers = [25, 5, 9, 10, 15, 8]
    print(numbers)
    remove_multiples(numbers, 5) # remove multiples of 5
    print("Numbers left", numbers) 

def remove_multiples(number_list, multiples_of):
    for i in number_list:
        if i % multiples_of == 0:
            number_list.remove(i)
    return number_list

main()

希望这是你正在寻找的东西。

答案 2 :(得分:0)

从您当前正在迭代的列表中删除元素绝不是一个好主意。

相反,使用list comprehension创建并返回一个没有不必要元素的新列表:

def remove_multiples(number_list, multiples_of):
    return [num for num in number_list if num % multiples_of != 0]

print remove_multiples([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 2)
>> [1, 3, 5, 7, 9]