+++ /dev/null
-# Copyright 2000 by Jeffrey Chang. All rights reserved.
-# This code is part of the Biopython distribution and governed by its
-# license. Please see the LICENSE file that should have been included
-# as part of this package.
-
-"""This provides useful general functions for working with lists (OBSOLETE).
-
-This module and its C code equivalent are considered to be obsolete, and
-are likely to be deprecated in a future release of Biopython, before being
-removed. Please get in touch via the mailing list if this will affect you.
-Many of these functions can be avoided using the python set object.
-
-Functions:
-asdict Make the list into a dictionary (for fast testing of membership).
-items Get one of each item in a list.
-count Count the number of times each item appears.
-contents Calculate percentage each item appears in a list.
-itemindex Make an index of the items in the list.
-intersection Get the items in common between 2 lists.
-difference Get the items in 1 list, but not the other.
-indexesof Get a list of the indexes of some items in a list.
-take Take some items from a list.
-
-"""
-
-def asdict(l):
- """asdict(l) -> dictionary
-
- Return a dictionary where the keys are the items in the list, with
- arbitrary values. This is useful for quick testing of membership.
-
- """
- return count(l)
-
-def items(l):
- """items(l) -> list of items
-
- Generate a list of one of each item in l. The items are returned
- in arbitrary order.
-
- """
- try:
- return asdict(l).keys()
- except TypeError, x:
- if str(x).find("unhashable") == -1:
- raise
- # asdict failed because l is unhashable. Back up to a naive
- # implementation.
- l = l[:]
- l.sort()
- i = 0
- while i < len(l)-1:
- if l[i] == l[i+1]:
- del l[i]
- else:
- i += 1
- return l
-
-def count(items):
- """count(items) -> dict of counts of each item
-
- Count the number of times each item appears in a list of data.
-
- """
- c = {}
- for i in items:
- c[i] = c.get(i, 0) + 1
- return c
-
-def contents(items):
- """contents(items) -> dict of item:percentage
-
- Summarize the contents of the list in terms of the percentages of each
- item. For example, if an item appears 3 times in a list with 10 items,
- it is in 0.3 of the list.
-
- """
- counts = count(items)
- l = float(len(items))
- contents = {}
- for i, c in counts.items():
- contents[i] = c / l
- return contents
-
-def intersection(l1, l2):
- """intersection(l1, l2) -> list of common items
-
- Return a list of the items in both l1 and l2. The list is in
- arbitrary order.
-
- """
- inter = []
- words1 = count(l1)
- for w in l2:
- if words1.has_key(w):
- inter.append(w)
- del words1[w] # don't add the same word twice
- return inter
-
-def difference(l1, l2):
- """difference(l1, l2) -> list of items in l1, but not l2
-
- Return a list of the items in l1, but not l2. The list is in
- arbitrary order.
-
- """
- diff = []
- words2 = count(l2)
- for w in l1:
- if not words2.has_key(w):
- diff.append(w)
- words2[w] = 1 # don't add the same word twice
- return diff
-
-def itemindex(l):
- """itemindex(l) -> dict of item : index of item
-
- Make an index of the items in the list. The dictionary contains
- the items in the list as the keys, and the index of the first
- occurrence of the item as the value.
-
- """
- dict = {}
- for i in range(len(l)):
- if not dict.has_key(l[i]):
- dict[l[i]] = i
- return dict
-
-def indexesof(l, fn, opposite=0):
- """indexesof(l, fn) -> list of indexes
-
- Return a list of indexes i where fn(l[i]) is true.
-
- """
- indexes = []
- for i in range(len(l)):
- f = fn(l[i])
- if (not opposite and f) or (opposite and not f):
- indexes.append(i)
- return indexes
-
-def take(l, indexes):
- """take(l, indexes) -> list of just the indexes from l"""
- items = []
- for i in indexes:
- items.append(l[i])
- return items
-
-def take_byfn(l, fn, opposite=0):
- indexes = indexesof(l, fn, opposite=opposite)
- return take(l, indexes)
-
-# Try and load C implementations of functions. If I can't,
-# then just ignore and use the pure python implementations.
-try:
- from clistfns import *
-except ImportError:
- pass