Python嵌套for循环结果存在问题

Python嵌套for循环结果存在问题,python,loops,nested,Python,Loops,Nested,我非常感谢您对以下python代码的帮助,这些代码困扰了我一个多星期: 谁能解释一下原因: a) 代码没有从名为startt1的列表中删除元素#2并将其附加到newlist1。但它正在删除和添加元素1和4。跳过/忽略元素#2的合理原因是什么 b) 如果代码运行一次,则列表start1=[2,3,5]。现在,如果代码使用这个修改过的start1列表再次运行,元素#2现在将被删除,留下start1=[3,5],这是它在上面a)中应该做的 请注意,维护列表中变量的顺序很重要。 另外,我不想使用set(

我非常感谢您对以下python代码的帮助,这些代码困扰了我一个多星期: 谁能解释一下原因:

a) 代码没有从名为startt1的列表中删除元素#2并将其附加到newlist1。但它正在删除和添加元素1和4。跳过/忽略元素#2的合理原因是什么

b) 如果代码运行一次,则列表start1=[2,3,5]。现在,如果代码使用这个修改过的start1列表再次运行,元素#2现在将被删除,留下start1=[3,5],这是它在上面a)中应该做的

请注意,维护列表中变量的顺序很重要。 另外,我不想使用set(),因为在代码的实现中,重复项很重要

start1 = [1,2,3,4,5]
finish1 = [6,4,7,2,1,'w']
newlist1 = []
x=0
y=0

for starts in start1:
    x+=1
    for finishs in finish1:
        y+=1
        if starts == finishs:
            print (starts, finishs, sep=' = ') 
            newlist1.append(starts)
            start1.remove(starts)
print(start1)
print(newlist1)
解决方案我想我已经知道了: i) 简单的列表理解就能解决这个问题 (ii)使用NOT或NOT IN的简单for循环也将起作用

但是,这些解决方案不是我想要的,因为代码检查变量(员工)名称列表中一年的期末余额是否等于下一年的期初余额。
我希望这是清楚的,并提前感谢您的帮助。

您的问题似乎是您正在从列表中删除值,而列表当前正在重复执行。这是我的代码的固定版本

start1 = [1,2,3,4,5]
start1Copy=start1.copy()
finish1 = [6,4,7,2,1,'w']
newlist1 = []
x=0
y=0

for starts in start1Copy:
    x+=1
    for finishs in finish1:
        y+=1
        if starts == finishs:
            print (starts, finishs, sep=' = ')
            newlist1.append(starts)
            start1.remove(starts)
print(start1)
print(newlist1)

你的问题有点让人困惑,但我想这就是你想要的

start1 = [1,2,3,4,5]
finish1 = [6,4,7,2,1,'w']

newlist = [a for a,b in [(x,start1.remove(x)) for x in [y for y in start1.copy()] if x in finish1]]

print('Newlist',newlist, sep=': ')
print('Start1', start1, sep=': ')

>>> Newlist: [1, 2, 4]
>>> Start1: [3, 5]

您希望列表理解做什么?好的,谢谢,是不是在迭代对象时不应该修改/更改对象(在本例中为start1列表)?这是我的编程错误吗?我正试图更好地理解原始代码不起作用的原因。@marste我认为问题在于,在for循环中,它似乎保留了您在列表中的位置的索引。假设我有一个[1,3,6,2,8]的列表。如果它位于索引1,我删除了3,那么列表将变成[1,6,2,8]。现在,如果我尝试在下一个索引处运行代码,索引2以前是6,它现在认为2是列表中的下一个值。对不起,如果这个解释让人困惑的话。我不擅长解释事情,但我希望能有所帮助。