Python嵌套嵌套循环问题

时间:2020-11-10 19:26:36

标签: python loops nested

对于以下使我困扰了一个多星期的python代码,我将不胜感激: 谁能解释原因:

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

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

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

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)

我认为我已经知道的解决方案: 我)一个简单的列表理解将解决问题 (ii)使用NOT或NOT IN的简单for循环也可以。

但是,这些解决方案不是我想要的,因为代码正在检查变量(雇员)名称列表中一年的期末余额是否等于第二年的期初余额。 我希望这很清楚,在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

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

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)

答案 1 :(得分:0)

您的问题有点令人困惑,但我认为这就是您要寻找的

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]