-4

私はPython2.6を使用して小さなプロジェクトに取り組んでいます。最後に私のリストはこのようなものです。

data = ['1:Rammmm,mmmm', '2:surr.rrrrr', '3:Sam ttttt',
'1:qqqq qqqqqqq', '2:wwwwwwwwwww', '3:eeeeeeeee','4:tttttttt',
'1:zzzzzzzzzzzzz', '2:xxxxxxxxx']

ここでは、すべての1を1行に、すべての2を1行に、などをパイプで表示したいと思います。セパレーターとして。数字だけで並べ替えると、こんな感じになります。

{Rammmm,mmmm|qqqq qqqqqqq|zzzzzzzzzzzzz}
{surr.rrrrr|wwwwwwwwwww|xxxxxxxxx}
{Sam ttttt|eeeeeeeee}
{tttttttt}

Pythonでこれをどのように達成できますか?

4

6 に答える 6

3

これよりも優れていると思うので、私の他のソリューションを参照してください: https://stackoverflow.com/a/10173807/1219006

>>> from operator import itemgetter
>>> from itertools import groupby
>>> data = ['1:Rammmm,mmmm', '2:surr.rrrrr', '3:Sam ttttt',
'1:qqqq qqqqqqq', '2:wwwwwwwwwww', '3:eeeeeeeee','4:tttttttt',
'1:zzzzzzzzzzzzz', '2:xxxxxxxxx']
>>> sorted_data = sorted(((int(x),y) for x,y in (el.split(':') for el in data)),key=itemgetter(0))
>>> for k,v in groupby(sorted_data,key=itemgetter(0)):
        print '{' + '|'.join(text for num,text in v) + '}'


{Rammmm,mmmm|qqqq qqqqqqq|zzzzzzzzzzzzz}
{surr.rrrrr|wwwwwwwwwww|xxxxxxxxx}
{Sam ttttt|eeeeeeeee}
{tttttttt}

テスト

>>> data = ['1:Rameshrrrrrrr', '2:Sureshmmmmmm', '3:Samkkkkkkkk', '1:tttttttttt', '2:wwwwwwwwwwwwwwwww', '3:yyyyyyyyy', '4:gggggggggg', '1:qqqqqqqqqqq', '2:hhhhhhhhh']
>>> sorted_data = sorted(((int(x),y) for x,y in (el.split(':') for el in data)),key=itemgetter(0))
>>> for k,v in groupby(sorted_data,key=itemgetter(0)):
        print '{' + '|'.join(text for num,text in v) + '}'


{Rameshrrrrrrr|tttttttttt|qqqqqqqqqqq}
{Sureshmmmmmm|wwwwwwwwwwwwwwwww|hhhhhhhhh}
{Samkkkkkkkk|yyyyyyyyy}
{gggggggggg}
于 2012-04-16T06:23:45.477 に答える
0

欲望の出力を得るためにこのようにすることができます:

l=[]
for ls in data:
    l.append(ls[:1])
m=set(l)
for i in m:
    str=''
    for ls in data:
        if i==ls[:1]:
            str=str+ls[3:]+"|"
    print '{'+str+'}'
于 2012-04-16T13:30:23.947 に答える
0

このバリアントはさらに単純になる可能性があります。

data = ['1:Rammmm,mmmm', '2:surr.rrrrr', '3:Sam ttttt',
        '1:qqqq qqqqqqq', '2:wwwwwwwwwww', '3:eeeeeeeee','4:tttttttt',
        '1:zzzzzzzzzzzzz', '2:xxxxxxxxx']

d = dict()
for item in data:
    k, v = item.split(':')
    # if d already has list at key 'k', append to it; 
    # otherwise, create list, and append to newly created
    d.setdefault(k,list()).append(v)

# now print formatted list in order of sorted keys (1,2,3,4)
for k in sorted(d.keys()):
    print '{' + '|'.join(d[k]) + '}'
于 2012-04-17T01:49:14.400 に答える
0
#!/usr/bin/python

l = ['1:Rammmm,mmmm', '2:surr.rrrrr', '3:Sam ttttt', '1:qqqq qqqqqqq', '2:wwwwwwwwwww', 3:eeeeeeeee','4:tttttttt', '1:zzzzzzzzzzzzz', '2:xxxxxxxxx']

l = [ x.split(':') for x in l ]

d ={}
for k, v in l:
  try: 
    d[k]
  except:
    d[k] = []
  d[k].append(v)

l = d.values()
l = [ "|".join(x) for x in l ]
于 2012-04-16T06:44:59.767 に答える
0

必要になるだろう:

  • 各文字列を数字部分とその他の部分に分割する方法

  • 数値部分を整数に変換する方法

  • さまざまなパーツをすべて集める方法。同じ番号部分を持つ他のすべての部分のリストが必要です。

  • リスト内のすべての文字列をループして、すべてを収集します。

  • 他のパーツを結合して最終結果を作成する方法。

Python で何ができるかを知る良い方法は、Python プロンプトに移動して と入力することですhelp(something)。「何か」を、助けが必要なものに置き換えます。これらを試してください:

help(str.split)

help(str.join)

を呼び出して整数に変換することをお勧めしますint()。このような:

x = "3"
n = int(x)  # n is now the integer value 3

dictまた、 を使用して物を収集することを検討することをお勧めします。辞書キーごとに複数の値があります... でそれらを結合するか、dictでそれぞれに対して何らかのリストを作成する必要がありdictます。

幸運を!

于 2012-04-16T06:25:43.440 に答える
0

これはそれを行うより良い方法だと思います

>>> from collections import defaultdict
>>> data = ['1:Rammmm,mmmm', '2:surr.rrrrr', '3:Sam ttttt',
'1:qqqq qqqqqqq', '2:wwwwwwwwwww', '3:eeeeeeeee','4:tttttttt',
'1:zzzzzzzzzzzzz', '2:xxxxxxxxx']
>>> d = defaultdict(list)
>>> for num, text in (el.split(':') for el in data):
        d[int(num)].append(text)


>>> for key in sorted(d):
        print '{' + '|'.join(d[key]) + '}'


{Rammmm,mmmm|qqqq qqqqqqq|zzzzzzzzzzzzz}
{surr.rrrrr|wwwwwwwwwww|xxxxxxxxx}
{Sam ttttt|eeeeeeeee}
{tttttttt}
于 2012-04-16T12:09:23.517 に答える