对于以下使我困扰了一个多星期的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循环也可以。
但是,这些解决方案不是我想要的,因为代码正在检查变量(雇员)名称列表中一年的期末余额是否等于第二年的期初余额。 我希望这很清楚,在此先感谢您的帮助。
答案 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]