2017-08-15 2 views
-2

私は要素のリストをシャッフルしているよA1、... A6、... E1、...、E6は、リストをシャッフル

2つのルールを維持しながら:

Iループリストものの場合、それは順番にする必要があり、特定の文字または数字をフィルタリング:

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

はあなたが最終的順序はランダムに生成された(しかし、2つのルールに従う)になりたいですか?また、 "... b4、d4、c4 ..."でソートされたデータがどのような順序で指定されているかわからない場合は、指定した規則を破っているようです。 – digitaLink

+0

はい、ランダムなリストでなければなりません。反復してフィルタリングすると、フィルタリングされた要素は互いに相対的に並べ替えられます。各場合 [1] == '1':私はシャッフルで各々について といえ反復たとえば プリント(各) Iは、次いで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'] 
関連する問題