Python 3: User-friendly explanation without dictionaries, queues and other bs
Idea:\nWe need to answer a couple of questions here.\nHow to loop through our lists and what to return at the end.\nIt seems reasonable to remove elements from 
**Idea**:\nWe need to answer a couple of questions here.\nHow to loop through our lists and what to return at the end.\nIt seems reasonable to remove elements from ```students``` and ```sandwiches``` when there is a match.\nThus, we don\'t want to run into an out of range error. That dictates our first condition for the loop: ```len(students) > 0```.\nThen we need to somehow account for a situation when no more pairs are possible, no matter how many moves we\'ll make. To account for this, we will create a variable ```mismatch``` that will grow every time a current student cannot pick a current sandwich. In the worst case scenario, this variable can grow to the size of ```students```. That dictates our second condition for the loop: ```mismatch != len(students)```\nFinally, once the loop ends, the list ```students``` will only contain students that didn\'t get their meal. This is what we need to return\n\nO(n) and O(1)\n\n```\ndef countStudents(students, sandwiches):\n    mismatch = 0\n    while len(students) > 0 and mismatch != len(students):\n        if students[0] == sandwiches[0]:\n            students.pop(0)\n            sandwiches.pop(0)\n            mismatch = 0\n        else:\n            student_to_move = students[0]\n            students.pop(0)\n            students.append(student_to_move)\n            mismatch += 1\n    return len(students)\n```
['Python', 'Python3']