2016-09-10 9 views
-4

私はこれらにうまくいかないが、私に同行してください。私は、私のデータベース/リストから番号のセットを持っているすべての間の数字で4桁の数字であり、99994桁の同様の順列を見つけてグループ化する方法

を通じて0000が含まれるリストは言う:

[1234, 4354, 6554, 2134, 3214, 5456, 9911, 1199] 

基本的に、私はグループにそれらをしたいです各グループのリスト項目はすべて同じ番号が含まれている

1234, 2134, 3214 is group A 
6554, 5456 is group B 
9911, 1199 is group C 
4354 is group D 

ように - すなわち、グループAは、すべての数字1、2、3、および4で構成されていますそれから私は、LENを見つけるだろう(グループA)、len(グループB)、len(グループC)、len(グループD)... 、次にソートそれらは減少する様式でそれら。

どうすればよいですか? リストが巨大なら、メソッドはまだ正常に動作していますか?

+1

それはちょうどかもしれません私は質問を理解していません。 – Kevin

+3

これはコーディングサービスではありません。自分のコードを試しましたか?どのように失敗したのですか?エラーメッセージが表示された場合、完全なトレースバックは何ですか?また、グループはあなたが注文した順序でなければなりませんか?たとえば、あなたのグループCとDを切り替えることができますか? –

+0

グループにはどのようなものがありますか? – JakeD

答えて

0

ないあなたがグループに名前を付けについて何をしたいのか確認していますが、文字列にint型に変換した後itertools.groupbyを使用することができ、そしてそれらの文字を並べ替え

from itertools import groupby 

l = [1234, 4354, 6554, 2134, 3214, 5456, 9911, 1199] 

# ints to (int, sorted str) 
s = map(lambda x: (x, ''.join(sorted(str(x)))), l) 

# sort the list for groupby 
s.sort(key=lambda kv: kv[1]) 

# print out just the ints of the groups 
for _, g in groupby(s, lambda kv: kv[1]): 
    print map(lambda kv: kv[0], g) 

出力

[9911, 1199] 
[1234, 2134, 3214] 
[4354] 
[6554, 5456] 
+0

助けてくれてありがとう – sam

0

はここ(Pythonの2.7.10でテスト)ソリューションです:

def index(number): 
    digits = list(str(number)) 
    return ''.join(sorted(digits)) 

groups = {} 
numbers = [1234, 4354, 6554, 2134, 3214, 5456, 9911, 1199] 

for number in numbers: 
    key = index(number) 

    if key not in groups: 
     groups[key] = [] 

    groups[key].append(number) 

print groups.values() # [[1234, 2134, 3214], [4354], [6554, 5456], [9911, 1199]] 

この解決の鍵は、各番号の桁数を取得し、それらを並べ替え、その後、辞書のキーとしてその結果を使用することです。 index()は、各番号の数字順の形式を生成する単なる簡潔な方法です。

+0

助けてくれてありがとう – sam

関連する問題