How to work on lists
Revision as of 12:04, 21 January 2007 by MathematicalOrchid
Given any list
, how do I...?
- Get the size of the list.
- length xs
- Turn a list backwards.
- reverse xs
- Get the Nth element out of a list.
- xs !! n
- (Related: returns the first element of the list.)head xs
- (Related: returns the last element of the list.)last xs
- Add an element to the start of a list.
- new_element : xs
- Add an element to the end of a list.
- xs ++ [new_element]
- Insert an element into the middle of a list.
- Generally, you will have to split the list into two smaller lists, put the new element to in the middle, and then join everything back together. For example:
- let (ys,zs) = splitAt n xs in ys ++ [new_element] ++ zs
- Join two lists together.
- list1 ++ list2
- Delete the first N elements from a list.
- drop n xs
- (Related: removes just one element.)tail xs
- (Related: removes just the last element.)init xs
- Make a new list containing just the first N elements from an existing list.
- take n xs
- Split a list into two smaller lists (at the Nth position).
- splitAt n xs
- (Returns a tuple of two lists.)
- Delete the just Nth element of a list.
- This is tricky. AFAIK, there is no built-in function that does this. You have to split the list in two, remove the element from one list, and then join them back together, like this:
- let (ys,zs) = splitAt n xs in ys ++ (tail zs)
- (Related: removes the first element.)tail xs
- (Related: removes the last element. Slow if the list is big.)init xs
- Delete elements that meet some condition.
- Haskell has a function called which will do this for you. Beware though: it should really be named 'select' instead. For example,filterreturns a list of odd numbers. That is, it deletes everything that is not odd.filter odd xs
- Apply a function to all list elements.
- map my_function xs
- Convert a list of foos into a list of bars.
- Find or write a function to convert foo into bar, and then apply it to the whole list using .map
- Number the elements of a list (so I can process each one differently according to its position).
- zip xs [0..]
- (For example, giveszip ['a','b','c'] [0..].)[('a',0),('b',1),('c',2)]
- Total up a list of numbers.
- sum xs
- Find the highest/lowest element of a list.
- minimum xs
- maximum xs
- (Works not just for numbers but anything that is a member of the class. In particular, that includes characters and strings.)Ord
- Sort a list.
- You'll need to import first, but then you can just doData.List.sort xs
- Find out if some item is in a list.
- my_element `elem` xs