Shuffle two list at once with same order

I'm using nltk corpus movie_reviews where are a lot of documents. My task is get predictive performance of these reviews with pre-processing of the data and without pre-processing. But there is problem, in lists documents and documents2 I have the same documents and I need shuffle them in order to keep same order in both lists. I cannot shuffle them separately because each time I shuffle the list, I get other results. That is why I need to shuffle the at once with same order because I need compare them in the end (it depends on order). I'm using python 2.7

Example (in real are strings tokenized, but it is not relative):

    documents = [(['plot : two teen couples go to a church party , '], 'neg'),
                 (['drink and then drive . '], 'pos'),
                 (['they get into an accident . '], 'neg'),
                 (['one of the guys dies'], 'neg')]

    documents2 = [(['plot two teen couples church party'], 'neg'),
                  (['drink then drive . '], 'pos'),
                  (['they get accident . '], 'neg'),
                  (['one guys dies'], 'neg')]

And I need get this result after shuffle both lists:

    documents = [(['one of the guys dies'], 'neg'),
                 (['they get into an accident . '], 'neg'),
                 (['drink and then drive . '], 'pos'),
                 (['plot : two teen couples go to a church party , '], 'neg')]

    documents2 = [(['one guys dies'], 'neg'),
                  (['they get accident . '], 'neg'),
                  (['drink then drive . '], 'pos'),
                  (['plot two teen couples church party'], 'neg')]

I have this code:

    def cleanDoc(doc):
        stopset = set(stopwords.words('english'))
        stemmer = nltk.PorterStemmer()
        clean = [token.lower() for token in doc if token.lower() not in stopset and len(token) > 2]
        final = [stemmer.stem(word) for word in clean]
        return final

    documents = [(list(movie_reviews.words(fileid)), category)
                 for category in movie_reviews.categories()
                 for fileid in movie_reviews.fileids(category)]

    documents2 = [(list(cleanDoc(movie_reviews.words(fileid))), category)
                 for category in movie_reviews.categories()
                 for fileid in movie_reviews.fileids(category)]

    random.shuffle( and here shuffle documents and documents2 with same order) # or somehow

You can do it as:

    import random

    a = ['a', 'b', 'c']
    b = [1, 2, 3]

    c = list(zip(a, b))

    random.shuffle(c)

    a, b = zip(*c)

    print a
    print b

    [OUTPUT]
    ['a', 'c', 'b']
    [1, 3, 2]

Of course, this was an example with simpler lists, but the adaptation will be the same for your case.

Hope it helps. Good Luck.

From: stackoverflow.com/q/23289547