You could say:
```python
all_mses, all_l1s, all_alphas = zip(*mse_alphas)
```
But I think the correct answer is to restructure this use more broadly, by harnessing the ordering of the `Parallel` output. The idea is to immediately turn all the results into a single array. So if `_path_residuals` returns only `this_mses`, you can use something (if I understand correctly) like:
```python
all_mse_paths = Parallel( ... )( ... for ... for ...)
all_mse_paths = np.array(all_mse_paths).reshape(len(l1_ratios), len(folds), -1) # mses over shape (l1s, folds, alphas)
self.mse_path_ = np.squeeze(np.rollaxis(all_mse_paths, 2, 1))  # mses over shape (l1s, [alphas,] folds)
mean_mses = all_mse_paths.mean(axis=1) # mean mses over shape (l1s, alphas)

for l1_ratio, l1_alphas, alpha_mses in zip(l1_ratios, alphas, mean_mses):
    i_best_alpha = np.argmin(alpha_mses)
    ...
```