Is a list and an ordered set (or multiset) the same thing in mathematics? I've wondered whether a list is the same as an ordered set (or multiset) in mathematics ?
Since a list can contain the same element more than once, the above can only be true for an ordered multiset ?
Sometime people speak about a empty list like it is an empty set ? 
Why is it legal to use the $\in$ notation for a list, if it is not an ordered set (or multiset) ?
 A: I think you mean

whether a list in computer science is the same as an ordered set (or multiset) in mathematics ?

And the answer is that mathematics doesn't have the notion of a list - that was created to organize and store data in structures in a computer.
Mathematics does have the notion of a Set, and it comes with the property that its elements are distinct.  The notion of a Multiset also exists, and relaxes that property.
I'm pretty sure the distinction between List and Set exists in computer science because people wanted a term to describe a sequence of data (a "List") versus an unordered, unsequenced "Set", and because many lists are implemented in a way such that they are logically described as a List.  (For example, Linked Lists are pretty a pretty obvious choice wherein each element literally points to the next one in the list).
The notation s $\in$ S is overloaded a lot (even on this site, where the formatting for it is "\in") to mean s "is in" S, despite the more formal s "is an element of the set" S.
You could say that a List is most closely related to a Multiset... until...multiset. Computer science overloads a lot of terms.
Wanted to include something about why computer science has so many shared yet different terms:
In CS a lot of their terms are overloaded because of guarantees we want to make.  For example, in a list, there's a natural progression from one element to the next (somehow via pointers or data addresses or what) - in a Set, this may not be the case, but the notion of a Set still has its place in that it's valuable to have the concept of "distinct elements in some collection, even if their arrangement isn't assured".  A lot of times you want to be able to tell other parts of code "Give me a data structure with the following guarantees" and by having different types (List, Set, Map, etc), you can enforce some properties of the data structure you're getting.  
For example, maybe you don't care that the data is contiguous in memory, but you want to be able to move from one element of the list to the "next" according to an ordering.  You want a List of some kind.  Do you want to guarantee that each data element will be next to its logical neighbor in memory?  Then ask for an Array instead.  Do you not even care that you can get from one element to the next?  Ask for a Set or Multiset or a HashMap.  In addition to guarantees on organization, a lot of these structures make guarantees on the performance of various operations (inserting elements, fetching them, deleting them, etc).  Wow big edit.
