2011-04-25 10 views
1

どうすればよいですか? は、各タプルにランクを追加し、これを取得しようとしているこのサンプルPythonでタプルのランクを作成する

  Id, Id2 CCC 
     [ (A123 A120 '2011-03'), 
    LL=  (A133 A123 '2011-03'), 
     (D123 D120 '2011-04'), 
      (D140 D123 '2011-04'),] 

I.mで始まります。

 [(A123, A120 ,'2011-03',1), 
    LL=  (A133, A123, '2011-03',2), 
     (D123, D120, '2011-04',3), 
      (D140, D123, '2011-04',4),] 


    for i in range(len(LL)): 
     RowId = i+1 
     LL.append(RowId) 

は、私はこのような何かを得る:

 [(A123, A120 ,'2011-03'), 
    LL=  (A133, A123, '2011-03), 
     (D123, D120, '2011-04), 
      (D140, D123, '2011-04),1,2,3,4] 

答えて

3
import pprint 
LL= [ ('A123', 'A120', '2011-03'), 
     ('A133', 'A123', '2011-03'), 
     ('D123', 'D120', '2011-04'), 
     ('D140', 'D123', '2011-04'),] 
LL = [row+(i,) for i,row in enumerate(LL,1)] 
pprint.pprint(LL) 

利回り

[('A123', 'A120', '2011-03', 1), 
('A133', 'A123', '2011-03', 2), 
('D123', 'D120', '2011-04', 3), 
('D140', 'D123', '2011-04', 4)] 

ここでは説明のビットです:

我々はこのように定義されたLLで始まる:

In [28]: LL 
Out[28]: 
[('A123', 'A120', '2011-03'), 
('A133', 'A123', '2011-03'), 
('D123', 'D120', '2011-04'), 
('D140', 'D123', '2011-04')] 

最初のトリックを使用することですenumerate :「ランク」は、0からカウントを開始することを除いて、あなたが望むものに近く、行の前ではなく、最後に置かれ

In [30]: list(enumerate(LL)) 
Out[30]: 
[(0, ('A123', 'A120', '2011-03')), 
(1, ('A133', 'A123', '2011-03')), 
(2, ('D123', 'D120', '2011-04')), 
(3, ('D140', 'D123', '2011-04'))] 

。私たちは、enumerate(LL,1)を使用して、1とカウントを開始しenumerateを伝えることができ、私たちはlist comprehensionを使用して行の末尾にランクを配置することができます:

リスト内包で
In [31]: [row+(i,) for i,row in enumerate(LL,1)] 
Out[31]: 
[('A123', 'A120', '2011-03', 1), 
('A133', 'A123', '2011-03', 2), 
('D123', 'D120', '2011-04', 3), 
('D140', 'D123', '2011-04', 4)] 

row('A123', 'A120', '2011-03')のようなタプルで、 とrow+(i,)はタプルの合計である:

In [32]: ('A123', 'A120', '2011-03')+(1,) 
Out[32]: ('A123', 'A120', '2011-03', 1) 

これは、リスト内包の各列が構成されている方法です。

+0

これで何かが邪魔になりました。 LL = pprint.pprint([行+(i、)i、列挙列(LL、1)])を使用します。 LLの処理を続行する。そして、エラーを得る。 LLはリストタイプにとどまる必要があります。 – Merlin

+0

@ user428862: 'LL'を再定義するには、' LL = [行+(i、)i、行を列挙する(LL、1)] 'を使用します。 – unutbu

+0

さて、完了! T、あなたは何をしたのか説明できますか? – Merlin

0
 
for i in range(len(LL)): 
     RowId = i+1 
     LL[i].append(RowId) 

はそれをテストしてください。

+0

didntの仕事thasnk – Merlin

+0

おおを。 1つのタプルが作成されると、要素をタプルに追加することはできません:) なぜリストを使用しないのですか? –

1

タプルは不変で、新しいタプルを作成するため、列挙型を使用してランク変数(1から始まると1を加えたもの)を作成し、新しいタプルの新しいリストを作成できます。

例では、あまりにもあなたのリスト上で動作するはずです:

In [1]: LL=[(1,2,3),(1,2,3)] 

In [2]: [j+(i+1,) for i,j in enumerate(LL)] 
Out[2]: [(1, 2, 3, 1), (1, 2, 3, 2)] 
関連する問題