If you want this purely in Python, you could use filter to filter out those entries in your data list that contain a 1 in the corresponding entries of mask. Make a list of tuples that combine the data and mask together, use filter and use the first element of each tuple to determine which elements in this list of tuples to keep, then simply extract the data part when you're done using map. Something like:
In [1]: mask = [0,0,0,1,1,0,0]
In [2]: data = [1,2,3,4,5,6,7]
In [3]: L = [(x,y) for (x,y) in zip(mask,data)]
In [4]: F = filter(lambda z: z[0], L)
In [5]: data = map(lambda z: z[1], F)
In [5]: data
Out[5]: [4, 5]
However, if you want to best do the logical indexing efficiently, I would use numpy to do that for you. Create a numpy array of your mask and data, then use logical indexing like in MATLAB to get what you want:
In [6]: import numpy as np
In [7]: L = np.array(data)
In [8]: M = np.array(mask, dtype='bool')
In [9]: data = list(L[M])
In [10]: data
Out[10]: [4, 5]
If you're coming from MATLAB and are switching over to Python, numpy is the way to go. The syntax used to slice through the arrays and the built-in functions used on numpy arrays is very akin to how you'd do the same operations in MATLAB.
Good luck!