我当前的代码使用for循环,我尝试从列表3中删除偶数,从列表2中删除奇数。 但是我的问题是,当for循环迭代时,位置2中的项目在项目被移除后向下移动到位置1,因此它会跳过一个项目并且代码没有按预期工作
set_time_limit(0);
如何使用for循环删除偶数和奇数而不跳过任何数字?
答案 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)