从子列表列表中随机选择子集

2024-05-31 23:48:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有4个列表,每个列表包含3个子列表

L1 = [[sub11],[sub12],[sub13]]
L2 = [[sub21],[sub22],[sub23]]
L3 = [[sub31],[sub32],[sub33]]
L4 = [[sub41],[sub42],[sub43]]

我想从每个列表中随机选择子列表来创建最终的3列表

例如,最终的3列表可能如下所示

final1 = [[sub13],[sub21],[sub33],[sub42]]
final2 = [[sub12],[sub23],[sub31],[sub43]]
final3 = [[sub11],[sub22],[sub32],[sub41]]

谢谢你的帮助


Tags: l1列表个子sub21sub11sub13sub12sub31
3条回答
import random

L1 = [['sub11'],['sub12'],['sub13']]

L2 = [['sub21'],['sub22'],['sub23']]

L3 = [['sub31'],['sub32'],['sub33']]

L4 = [['sub41'],['sub42'],['sub43']]


final = []
for L in [L1, L2, L3, L4]:
    final.append(random.sample(L, 1)[0])

print final

输出:

[['sub11'], ['sub22'], ['sub31'], ['sub42']]

重复多次你需要建立更多的随机列表

您可以使用random.sample()将每个随机分组,然后zip()结果:

>>> import random
>>> L1 = [['sub11'],['sub12'],['sub13']]
>>> L2 = [['sub21'],['sub22'],['sub23']]
>>> L3 = [['sub31'],['sub32'],['sub33']]
>>> L4 = [['sub41'],['sub42'],['sub43']]
>>> all_lists = [L1, L2, L3, L4]
>>> random_lists = map(list, list(zip(*(random.sample(item, len(item)) for item in all_lists))))
>>> for i in random_lists:
...     print(i)
...
[['sub13'], ['sub22'], ['sub33'], ['sub43']]
[['sub11'], ['sub23'], ['sub32'], ['sub42']]
[['sub12'], ['sub21'], ['sub31'], ['sub41']]
>>> L1 = [12, 13, 11]
>>> L2 = [22, 23, 21]
>>> L3 = [31, 32, 33]
>>> L4 = [41, 42, 43]
>>> from random import shuffle
>>> L = [L1, L2, L3, L4]
>>> for item in L:
...     shuffle(item)
... 
>>> F = zip(*L)
>>> final1, final2, final3 = F
>>> final1
(12, 22, 31, 41)
>>> final2
(13, 23, 32, 42)
>>> final3
(11, 21, 33, 43)

相关问题 更多 >