洗牌一个共同的第二个元素的所有列表
Shuffling all lists of a common second elements
我有这个清单:
[[1, 0.007], [2, 0.007], [3, 0.007], [4, 0.007], [5, 0.01], [6, 0.01], [7, 0.01], [8, 0.01], [9, 0.02], [10, 0.02], [11, 0.02], [12, 0.02], [13, 0.13], [14, 0.13], [15, 0.13], [16, 0.13], [17, 0.28], [18, 0.28], [19, 0.28], [20, 0.28], [21, 4.0], [22, 4.0], [23, 4.0], [24, 4.0]]
我想重新排列,以便随机排列所有常见第二元素(0.007、0.01、0.02、0.13、.28、4)的列表。
像这样,例如:
[[3, 0.007], [1, 0.007], [4, 0.007], [2, 0.007], [7, 0.01], [6, 0.01], [5, 0.01], etc.
前四个列表(1,2,3,4),都属于一个“0.007”系列,被随机混在一起;接下来的四个,都属于“0.01”系列,随机打乱等等
只需对第二个元素进行简单排序
def getkey(item):
return item[1]
sorted(l,key=getkey)
您可以使用 itertools.groupby
和 random.shuffle
来重建随机列表列表,如下所示:
In [23]: mix = [[1, 0.007], [2, 0.007], [3, 0.007], [4, 0.007], [5, 0.01], [6, 0.01], [7, 0.01], [8, 0.01], [9, 0.02], [10, 0.02], [11, 0.02], [12, 0.02], [13, 0.13], [14, 0.13], [15, 0.13], [16, 0.13], [17, 0.28], [18, 0.28], [19, 0.28], [20, 0.28], [21, 4.0], [22, 4.0], [23, 4.0], [24, 4.0]]
In [24]: from itertools import groupby
In [25]: import random
In [26]: groups = []
# grouping each list by 2nd item
In [27]: for _, g in groupby(mix, lambda x: x[1]):
....: group = list(g)
....: random.shuffle(group) # then shuffle each list in place
....: groups.extends(group)
In [28]: groups
Out[28]:
[[2, 0.007], [4, 0.007], [3, 0.007], [1, 0.007],
[8, 0.01], [5, 0.01], [7, 0.01], [6, 0.01],
[11, 0.02], [9, 0.02], [10, 0.02], [12, 0.02],
[15, 0.13], [13, 0.13], [14, 0.13], [16, 0.13],
[20, 0.28], [19, 0.28], [17, 0.28], [18, 0.28],
[21, 4.0], [22, 4.0], [24, 4.0], [23, 4.0]]
from random import shuffle
a = [ key[0] for key in lists]
shuffle(a)
从这里您可以使用您的静态值[1] 数字重新创建列表。
我有这个清单:
[[1, 0.007], [2, 0.007], [3, 0.007], [4, 0.007], [5, 0.01], [6, 0.01], [7, 0.01], [8, 0.01], [9, 0.02], [10, 0.02], [11, 0.02], [12, 0.02], [13, 0.13], [14, 0.13], [15, 0.13], [16, 0.13], [17, 0.28], [18, 0.28], [19, 0.28], [20, 0.28], [21, 4.0], [22, 4.0], [23, 4.0], [24, 4.0]]
我想重新排列,以便随机排列所有常见第二元素(0.007、0.01、0.02、0.13、.28、4)的列表。
像这样,例如:
[[3, 0.007], [1, 0.007], [4, 0.007], [2, 0.007], [7, 0.01], [6, 0.01], [5, 0.01], etc.
前四个列表(1,2,3,4),都属于一个“0.007”系列,被随机混在一起;接下来的四个,都属于“0.01”系列,随机打乱等等
只需对第二个元素进行简单排序
def getkey(item):
return item[1]
sorted(l,key=getkey)
您可以使用 itertools.groupby
和 random.shuffle
来重建随机列表列表,如下所示:
In [23]: mix = [[1, 0.007], [2, 0.007], [3, 0.007], [4, 0.007], [5, 0.01], [6, 0.01], [7, 0.01], [8, 0.01], [9, 0.02], [10, 0.02], [11, 0.02], [12, 0.02], [13, 0.13], [14, 0.13], [15, 0.13], [16, 0.13], [17, 0.28], [18, 0.28], [19, 0.28], [20, 0.28], [21, 4.0], [22, 4.0], [23, 4.0], [24, 4.0]]
In [24]: from itertools import groupby
In [25]: import random
In [26]: groups = []
# grouping each list by 2nd item
In [27]: for _, g in groupby(mix, lambda x: x[1]):
....: group = list(g)
....: random.shuffle(group) # then shuffle each list in place
....: groups.extends(group)
In [28]: groups
Out[28]:
[[2, 0.007], [4, 0.007], [3, 0.007], [1, 0.007],
[8, 0.01], [5, 0.01], [7, 0.01], [6, 0.01],
[11, 0.02], [9, 0.02], [10, 0.02], [12, 0.02],
[15, 0.13], [13, 0.13], [14, 0.13], [16, 0.13],
[20, 0.28], [19, 0.28], [17, 0.28], [18, 0.28],
[21, 4.0], [22, 4.0], [24, 4.0], [23, 4.0]]
from random import shuffle
a = [ key[0] for key in lists]
shuffle(a)
从这里您可以使用您的静态值[1] 数字重新创建列表。