If the points represent a surface, you can use Delaunay triangulation as suggested by @wim.
import numpy as np
import scipy.spatial
import pylab
data = np.random.random((12,3)) # arbitrary 3D data set
tri = scipy.spatial.Delaunay( data[:,:2] ) # take the first two dimensions
pylab.triplot( data[:,0], data[:,1], tri.simplices.copy() )
pylab.plot( data[:,0], data[:,1], 'ro' ) ;

From there, the triangles, or simplicies, are accessed through the simplices
attribute of the tri
object. For example, tri.simplices[0]
refers to the first triangle, or simplex, and it returns an array of three integers, say, [ 10, 0, 5 ]
. This means that the points making up the first simplex are found at indices, 10, 0, and 5, in the array, data
.