Home > Software engineering >  Unexpected result with for loop in python [closed]
Unexpected result with for loop in python [closed]

Time:09-17

Could someone, please, explain to me the logic of this result?

wizard_list = ['cup', 'tea', 'knife', 'bread']
for i in wizard_list:
    print(i)
    for q in wizard_list:
        print(q)

The result:

cup
cup
tea
knife
bread
tea
cup
tea
knife
bread
knife
cup
tea
knife
bread
bread
cup
tea
knife
bread

I expected:

cup
cup
tea
tea
knife
knife
bread
bread

CodePudding user response:

You are iterating through each item and then whole list again per item.

wizard_list = ['cup', 'tea', 'knife', 'bread']
for i in wizard_list:
    print(i)
    print(i)

The above code will give you your desired result of printing twice.

CodePudding user response:

Since wizard_list contains 'cup', 'tea', 'knife', 'bread', that means that if you have a for loop like for x in wizard_list, the loop is going to iterate through 'cup', 'tea', 'knife', 'bread'. You're doing that in your outer loop, meaning i will at some point be each item in wizard_list. However, since you're doing another identical loop within the outer one, q will also loop through each item in the list. And because it's a loop within a loop, every value in wizard_list will be printed via the q loop before the i loop moves to the next item.

For example, on the first iteration, i is 'cup'. So, print(i) will print cup. The next line is the q for loop. The line after that is print(q), and since you're now looping through wizard_list in the q for loop, q will be set to 'cup' as well, and thus that will be printed.

After that, q moves onto the next item, 'tea'. Since a loop starts from the beginning, the line print(q) is reached again. So, so far you've printed cup, cup, and tea. The q for loop will continue printing all the items until bread is printed. At that point, the q loop ends because it reached the end of wizard_list. Thus, i will then be set to the next item in the list, 'tea', and the q loop will start over, starting from 'cup'.

So, the end result is that for each item in the list, you print all the items in the list.

  • Related