say.ff
say.ff

Reputation: 395

permutation of elements inside the list of list

I have a nested list as follows:

A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

I need to permute only the elements inside each list.

do you have any idea how can I do this?

Upvotes: 1

Views: 89

Answers (3)

Jean-François Fabre
Jean-François Fabre

Reputation: 140168

To shuffle each sublist in a list comprehension, you cannot use random.shuffle because it works in place. You can use random.sample with the sample length = the length of the list:

import random

A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

new_a = [random.sample(l,len(l)) for l in A]

print(new_a)

an output:

[[2, 1, 3], [5, 4, 6], [7, 9, 8]]

That solution is the best one if you don't want to modify your original list. Else, using shuffle in a loop as someone else answered works fine as well.

Upvotes: 1

JacobIRR
JacobIRR

Reputation: 8946

Use permutations from itertools:

from itertools import permutations
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
out = []
for i in A:
  for j in permutations(i):
    out.append(list(j))

print out

OUTPUT:

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1],
 [4, 5, 6], [4, 6, 5], [5, 4, 6], [5, 6, 4], [6, 4, 5], [6, 5, 4],
 [7, 8, 9], [7, 9, 8], [8, 7, 9], [8, 9, 7], [9, 7, 8], [9, 8, 7]]

Upvotes: 0

Opsy Opsy
Opsy Opsy

Reputation: 185

You can do something like this:

import random
A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for x in A:
    random.shuffle(x)

Upvotes: 4

Related Questions