Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 洗牌公共第二个元素的所有列表_Python_Shuffle - Fatal编程技术网

Python 洗牌公共第二个元素的所有列表

Python 洗牌公共第二个元素的所有列表,python,shuffle,Python,Shuffle,我有以下清单: [[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

我有以下清单:

[[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)

只需对第二个元素进行排序即可

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]]
您可以使用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]]
从这里,您可以使用静态值[1]编号重新创建列表


从这里,您可以使用静态值[1]数字重新创建列表。

定义您所说的无序:为什么示例中的特定顺序是正确的?我试图在问题中详细说明。我所说的随机混合是指随机混合定义你所说的随机混合:为什么你示例中的特定顺序是正确的?我试图在问题中详细阐述。我的意思是随机混合,我可能理解错了你的答案,但每次都会得到相同的结果。我需要在2d元素上对列表列表进行排序,就像现在一样,但是,我希望随机重新排列一组常见2d元素。好的,我明白了。如果您将输入列表随机化,然后按上述方式排序,会怎么样?另一种方法是创建一个列表,其中内部列表具有相同的第二个元素,并将每个内部列表洗牌。我可能理解您的答案是错误的,但每次都会得到相同的结果。我需要在2d元素上对列表列表进行排序,就像现在一样,但是,我希望随机重新排列一组常见2d元素。好的,我明白了。如果您将输入列表随机化,然后按上述方式排序,会怎么样?另一种方法是创建一个列表,其中内部列表具有相同的第二个元素,并将每个内部列表洗牌。