Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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_Sorting_Random - Fatal编程技术网

Python 无序排列列表,同时保持与相关元素相关的顺序

Python 无序排列列表,同时保持与相关元素相关的顺序,python,sorting,random,Python,Sorting,Random,我想洗牌一个元素列表a1。。。a6。。。e1,…,e6 在遵守两条规则的同时: 如果我在列表中循环并过滤掉一个特定的字母或数字,它应该按顺序排列: x = [['a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7'], ['b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7'], ['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7'], ['d1', 'd2', 'd3', 'd4', 'd5', 'd6',

我想洗牌一个元素列表a1。。。a6。。。e1,…,e6

在遵守两条规则的同时:

如果我在列表中循环并过滤掉一个特定的字母或数字,它应该按顺序排列:

x = [['a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7'],
 ['b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7'],
 ['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7'],
 ['d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7'],
 ['e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7']]
a1、a2、a3。。。或者a1,b1,c1

我如何在保持这些规则的情况下洗牌列表?有python库吗。为了这样的任务

下面是一个符合标准的洗牌示例:

a1、b1、a2、b2、c1、a3、d1、c2、d2、e1、a4、b3、c3、d3、b4、d4、c4、a5、e2、d5、e3、c5、a6、b5、e4、a7、b6、c6、b7、d6、e5、e6、c7、d7、e7

for each in shuffled:
    if each[1]=='1':
        print(each)
产量:a1、b1、c1、d1、e1


问题不是对它们进行排序,而是首先生成随机列表。

不确定是否有库这样做。 有一个简单的解决方案:

首先,将列表拆分为按顺序排列元素的子列表:

x = [['a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7'],
 ['b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7'],
 ['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7'],
 ['d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7'],
 ['e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7']]
然后弹出随机选择的子列表的第一个元素

from random import shuffle
select = list(range(5))*7 
shuffle(select) 
[x[idx].pop(0) for idx in select]
结果是(取决于洗牌结果):


您是否希望随机生成最终订单(但遵守这两条规则)?此外,还不清楚您希望以什么顺序对数据进行排序“…b4、d4、c4…”似乎违反了您指定的规则。是的,这应该是一个随机列表,在迭代和筛选时,筛选的元素彼此相对排序。例如,如果我在shuffled中使用For each进行迭代:如果each[1]='1':打印(each),则得到a1、b1、c1、d1、e1。。。。不是b1、a1或类似的东西。