Not really agree.
In the command ```assert_that(["spam", "eggs"]).contains("spam")``` the ```matcher```is looked up from its name, for e.g. ```contains```for the ```ContainsMatcher``` and, then, the ```matcher.accept``` is checked from the ```assert_that``` parameter, i.e. ```["span", "eggs"]```. So, it is  ```["span", "eggs"]``` which has to be iterable (and it is ;-)) and not ```"spam"```.
Finally, the ```matcher.matches``` is called and, in the ```ContainsMatcher``` just checks ```self.expected in actual``` where ```self.expected``` is "spam". If it was ```["spam"]``` instead of ```"spam"```, the answer will be ```False```:(