Python For循环列表

时间:2015-11-25 10:32:40

标签: python

我当前的代码使用for循环,我尝试从列表3中删除偶数,从列表2中删除奇数。 但是我的问题是,当for循环迭代时,位置2中的项目在项目被移除后向下移动到位置1,因此它会跳过一个项目并且代码没有按预期工作

set_time_limit(0);

如何使用for循环删除偶数和奇数而不跳过任何数字?

5 个答案:

答案 0 :(得分:2)

首先,你不应该修改你正在迭代的列表。

至于从列表中删除奇数和偶数的问题,在Python中有一种非常简单的方法:filter()

过滤器生成器结合简单的lambda函数可以解决这个问题:

list3 = filter(lambda x: x % 2, list3)

答案 1 :(得分:1)

首先,修改你正在迭代的列表是一个未定义的行为,所以这是一个不好的做法。 对于您的问题,我建议您使用filter

even = filter(lambda x: x%2, list3)
odd = filter(lambda x: not x%2, list2)

答案 2 :(得分:1)

在迭代时基本上修改列表是一种不好的做法。因为在迭代它时正在修改列表。您可以使用列表理解:

list2 = [n for n in list2 if int(n) % 2 == 0]
print list2

list3 = [n for n in list3 if int(n) % 2 != 0]
print list3

答案 3 :(得分:1)

作为列表过滤的替代方法,您可以在用户输入值时对值进行排序。通过适当分离可能如下所示的问题:

def get_numbers(num=10):
    for _ in xrange(10):
        yield int(input("Enter a whole number: "))

def populate_lists(size, evens, odds):
    for number in get_numbers(size):
        (odds if (size % 2) else evens).append(number)

答案 4 :(得分:0)

您可以在迭代时复制列表,但在实际列表中执行删除:

list1 = ["roll", "burger", "cheese", "ketchup", "mustard"]
list2 = []
list3 = []

for i in list1:
    print(i)
#code to add ten numbers to list2
a = 0
while a < 10:
 a = a + 1
 userdata = input("Enter a whole number: ")
 usernum = int(userdata)
 list2.append(usernum)

list3[:0]=list2
print(list3)

for n in list(list2):
     if int(n) % 2 != 0:
         list2.remove(n)
print(list2)

for x in list(list3):
    if int(x) % 2 == 0:
        list3.remove(x)
print(list3)