Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表中的Python For循环_Python - Fatal编程技术网

列表中的Python For循环

列表中的Python For循环,python,Python,我当前的代码使用for循环,我试图从列表3中删除偶数,从列表2中删除奇数。 然而,我的问题是,当for循环迭代时,位置2的项在删除项后向下移动到位置1,因此它跳过了项,代码无法按预期工作 list1 = ["roll", "burger", "cheese", "ketchup", "mustard"] list2 = [] list3 = [] for i in list1: print(i) #code to add ten numbers to list2 a = 0 while

我当前的代码使用for循环,我试图从列表3中删除偶数,从列表2中删除奇数。 然而,我的问题是,当for循环迭代时,位置2的项在删除项后向下移动到位置1,因此它跳过了项,代码无法按预期工作

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 list2:
     if int(n) % 2 != 0:
         list2.remove(n)
print(list2)

for x in list3:
    if int(x) % 2 == 0:
        list3.remove(x)
print(list3)
list1=[“面包卷”、“汉堡”、“奶酪”、“番茄酱”、“芥末”]
列表2=[]
列表3=[]
对于清单1中的i:
印刷品(一)
#将十个数字添加到列表2中的代码
a=0
而a<10:
a=a+1
userdata=input(“输入一个整数:”)
usernum=int(userdata)
list2.append(usernum)
列表3[:0]=列表2
打印(列表3)
对于列表2中的n:
如果int(n)%2!=0:
列表2.删除(n)
打印(列表2)
对于清单3中的x:
如果int(x)%2==0:
清单3.删除(x)
打印(列表3)

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

首先,修改正在迭代的列表是一种未定义的行为,因此是一种不好的做法。 对于您的问题,我建议您使用:


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

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

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

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

滤波器生成器与简单的lambda函数相结合,可以实现以下功能:

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

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

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)
list1=[“面包卷”、“汉堡”、“奶酪”、“番茄酱”、“芥末”]
列表2=[]
列表3=[]
对于清单1中的i:
印刷品(一)
#将十个数字添加到列表2中的代码
a=0
而a<10:
a=a+1
userdata=input(“输入一个整数:”)
usernum=int(userdata)
list2.append(usernum)
列表3[:0]=列表2
打印(列表3)
对于列表中的n(列表2):
如果int(n)%2!=0:
列表2.删除(n)
打印(列表2)
对于列表中的x(列表3):
如果int(x)%2==0:
清单3.删除(x)
打印(列表3)

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

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)

你真的想让它就位吗?改为列表理解如何?例如,您可以创建一个新列表,并将所需的值推入其中,而不是从正在迭代的列表中删除它们。或者,您可以在输入阶段附加到所需的列表。您可以将列表括在
list()
中,以便在迭代时复制,但删除将发生在原来的名单上。你为回答者赢得了大量的代表,恭喜!
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)