# Collections

### Lists

``````
# Lists store sequences (like an Array in Ruby)
li = []
other_li = [4, 5, 6]

# Add stuff to the end of a list with append
li.append(1)    #li is now [1]
li.append(2)    #li is now [1, 2]
li.append(4)    #li is now [1, 2, 4]
li.append(3)    #li is now [1, 2, 4, 3]
# Remove from the end with pop
li.pop()        #=> 3 and li is now [1, 2, 4]
# Let's put it back
li.append(3)    # li is now [1, 2, 4, 3] again.

# Access a list like you would any array
li[0] #=> 1
# Look at the last element
li[-1] #=> 3

# Looking out of bounds is an IndexError
li[4] # Raises an IndexError

# You can look at ranges with slice syntax.
# (It's a closed/open range for you mathy types.)
li[1:3] #=> [2, 4]
# Omit the beginning
li[2:] #=> [4, 3]
# Omit the end
li[:3] #=> [1, 2, 4]
# Select every second entry
li[::2] #=>[1,4]
# Revert the list
li[::-1] #=> [3, 4, 2, 1]
# Use any combination of these to make advanced slices
# li[start:end:step]

# Remove arbitrary elements from a list with "del"
del li[2] # li is now [1, 2, 3]

li + other_li #=> [1, 2, 3, 4, 5, 6] - Note: li and other_li is left alone

# Concatenate lists with "extend()"
li.extend(other_li) # Now li is [1, 2, 3, 4, 5, 6]

# Check for existence in a list with "in"
1 in li #=> True

# Examine the length with "len()"
len(li) #=> 6
``````

### Tuples

``````
# Tuples are like lists but are immutable.
tup = (1, 2, 3)
tup[0] #=> 1
tup[0] = 3  # Raises a TypeError

# You can do all those list thingies on tuples too
len(tup) #=> 3
tup + (4, 5, 6) #=> (1, 2, 3, 4, 5, 6)
tup[:2] #=> (1, 2)
2 in tup #=> True

# You can unpack tuples (or lists) into variables
a, b, c = (1, 2, 3)     # a is now 1, b is now 2 and c is now 3
# Tuples are created by default if you leave out the parentheses
d, e, f = 4, 5, 6
# Now look how easy it is to swap two values
e, d = d, e     # d is now 5 and e is now 4
``````

### Dictionaries

``````
# Dictionaries store key-value mappings (like Hashes in Ruby)
empty_dict = {}
# Here is a prefilled dictionary
filled_dict = {"one": 1, "two": 2, "three": 3}

# Look up values with []
filled_dict["one"] #=> 1

# Get all keys as a list with "keys()"
filled_dict.keys() #=> ["three", "two", "one"]
# Note - Dictionary key ordering is not guaranteed.
# Your results might not match this exactly.

# Get all values as a list with "values()"
filled_dict.values() #=> [3, 2, 1]
# Note - Same as above regarding key ordering.

# Check for existence of keys in a dictionary with "in"
"one" in filled_dict #=> True
1 in filled_dict #=> False

# Looking up a non-existing key is a KeyError
filled_dict["four"] # KeyError

# Use "get()" method to avoid the KeyError
filled_dict.get("one") #=> 1
filled_dict.get("four") #=> None
# The get method supports a default argument when the value is missing
filled_dict.get("one", 4) #=> 1
filled_dict.get("four", 4) #=> 4

# "setdefault()" inserts into a dictionary only if the given key isn't present
filled_dict.setdefault("five", 5) #filled_dict["five"] is set to 5
filled_dict.setdefault("five", 6) #filled_dict["five"] is still 5
``````

### Sets

``````
# Sets store ... well sets
empty_set = set()
# Initialize a "set()" with a bunch of values
some_set = set([1,2,2,3,4]) # some_set is now set([1, 2, 3, 4])

# Since Python 2.7, {} can be used to declare a set
filled_set = {1, 2, 2, 3, 4} # => {1, 2, 3, 4}

# Add more items to a set
filled_set.add(5) # filled_set is now {1, 2, 3, 4, 5}

# Do set intersection with &
other_set = {3, 4, 5, 6}
filled_set & other_set #=> {3, 4, 5}

# Do set union with |
filled_set | other_set #=> {1, 2, 3, 4, 5, 6}

# Do set difference with -
{1,2,3,4} - {2,3,5} #=> {1, 4}

# Check for existence in a set with in
2 in filled_set #=> True
10 in filled_set #=> False
``````

### Challenge

What will the following code return?

``````list = [1,2,3,4,5]
list[1:3]
``````

Alternatively, you can try out Learneroo before signing up.

### Challenge

You will be given an array (or "list") of numbers `ar`. Create and print another array of length 2 that just contains the first and last number in the original array.

Alternatively, you can try out Learneroo before signing up.