在保持相对于相关元素的顺序的同时改组列表

时间:2017-08-15 18:37:50

标签: python sorting random

我正在调整一个元素列表a1,... a6,... e1,...,e6

同时保留两条规则:

如果我循环浏览列表并过滤掉特定的字母或数字,则应按顺序排列:

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。

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

1 个答案:

答案 0 :(得分:0)

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

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

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]

结果是(取决于你的随机播放结果):

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