2017-08-15 56 views
-2

我期待洗牌的元素列表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。

问题不在于排序它们,它首先生成随机列表。

+0

你想随机生成最终订单(但服从两个规则)?此外,您还不清楚按“... b4,d4,c4 ...”排序的数据的顺序似乎违反了您指定的规则。 – digitaLink

+0

是的,它应该是一个随机列表,当迭代和过滤时,它们被过滤的元素相对于彼此排序。例如,如果我与 每个迭代虽然在混洗: 如果每个[1] == '1': 打印(各) 我然后得到A1,B1,C1,D1,E1 ....不B1,A1或类似的东西。 –

回答

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'] 
相关问题