user3447653
user3447653

Reputation: 4148

Select random items from list of lists in Python

I have a list of lists of different lengths. From each list of lists, I need to randomly select 10 items. Then I have to combine the results in a single list with each list item separated by comma. (Pls see the output below). Not sure whether this is possible in Python. Any help would be appreciated.

[[-26.0490761  27.79991  ]
 [-25.9444218  27.9116535]
 [-26.1055737  27.7756424]
 ..., 
 [-26.036684   28.0508919]
 [-26.1367035  28.2753029]
 [-26.0668163  28.1137161]]

[[ 45.35693   -63.1701241]
 [ 44.6566162 -63.5969276]
 [ 44.7197456 -63.48137  ]
  ..., 
 [ 44.624588  -63.6244736]
 [ 44.6563835 -63.679512 ]
 [ 44.66706   -63.621582 ]]

I would like to get the output in this format that is suitable for plotting them on a map using Folium.

 [[-26.0490761  27.79991],
  [-25.9444218  27.9116535],
  [ 44.6563835 -63.679512 ],
  [ 44.66706   -63.621582 ]]

I tried this code but not sure what went wrong:

  for cluster in clusters:
    for i in range(2):
       modifiedlist.append(cluster)

Upvotes: 1

Views: 2174

Answers (2)

John Coleman
John Coleman

Reputation: 51998

Something like this is easy using the module random:

import random

def sampleFromLists(lists,n):
    """draws n elements from each list in lists
returning the result as a single list"""
    sample = []
    for subList in lists:
        sample.extend(random.sample(subList,n))
    return sample

Sample data (a list of lists of 2-element lists):

data = [
    [[-26.0490761, 27.79991],
     [-25.9444218, 27.9116535],
     [-26.1055737, 27.7756424],
     [-26.036684, 28.0508919],
     [-26.1367035, 28.2753029],
     [-26.0668163,28.1137161]],

    [[ 45.35693, -63.1701241],
     [44.6566162 -63.5969276],
     [44.7197456, -63.48137],
     [44.624588, -63.6244736],
     [44.6563835,-63.679512],
     [44.66706, -63.621582]]
]

And then:

>>> sampleFromLists(data,2)
[[-26.036684, 28.0508919], [-26.0490761, 27.79991], [44.7197456, -63.48137], [44.6563835, -63.679512]]

Upvotes: 2

MooingRawr
MooingRawr

Reputation: 4991

import random

x = [[1,2],[3,4],[5,6],[7,8],[9],[7675,6456,4],[5,6]]

z = []
for i in range(10):
  y = random.choice(x)
  z.append([random.choice(y), random.choice(y)])

print(z)

random.choice() picks a random item from the given input (in our case a list).

Upvotes: 0

Related Questions