Почему объект класса с параметром = "first" появляется в списке btest
и в списке ctest
?
У меня проблема с большим фрагментом кода, поэтому я написал этот меньший фрагментчтобы лучше понять, как эти операторы if / else работают в цикле for со списком объектов класса.Но я до сих пор не понимаю.
class test:
def __init__(self,option,place):
self.option=option
self.place=place
def __repr__(self):
return("option:"+self.option+"\npalce:"+self.place)
optionlist=["first","second","thrid","fourth"]
placelist=["switzerland","germany","thailand","italy"]
testlist=[]
item=0
while item <len(optionlist):
testl=test(optionlist[item],placelist[item])
testlist.append(testl)
item+=1
btest=[]
ctest=[]
for x in testlist:
if x.option=="first":
btest.append(x)
print("here")
if x.option=="second":
print("here2")
# If I delete this 2nd if statement the ctest list
# doesn't contain a object with option="first", but if I
# leave it it does. Why?
else:
ctest.append(x)
print("no")
print("btest:",btest)
print("ctest:",ctest)
Если я позволю этому коду запускаться * без 2-го оператора if
, он даст мне следующий вывод:
here
no
no
no
btest: [option:first
palce:switzerland]
ctest: [option:second
palce:germany, option:thrid
palce:thailand, option:fourth
palce:italy]
Ну, этотакже то, что я ожидал, но почему это дает следующий вывод, если я позволю ему запускаться * со вторым оператором if:
here
no
here2
no
no
btest: [option:first
palce:switzerland]
ctest: [option:first
palce:switzerland, option:thrid
palce:thailand, option:fourth
palce:italy]