2011-04-25 58 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

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'))] 

这是接近你想要什么,除了“等级”从0开始计数,并放置在该行的前面,而不是在最后。我们可以告诉enumerate下手计数1,使用enumerate(LL,1),我们可以通过在该行的末尾将等级A,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([row +(i,)for i,row in enumerate(LL,1)])。要继续处理LL。并获得错误。 LL需要保持列表类型。 – Merlin 2011-04-25 17:56:00

+0

@ user428862:重新定义'LL'使用'LL = [row +(i,)for i,row in enumerate(LL,1)]''。 – unutbu 2011-04-25 18:11:28

+0

好的,完成了! T,你能解释一下你做了什么吗? – Merlin 2011-04-25 18:18:29

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

请测试它。

+0

没有工作thasnk – Merlin 2011-04-25 17:33:17

+0

喔。一旦创建元素,就不能将元素添加到元组中:) 为什么不使用该列表呢? – 2011-04-25 17:36:29

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)]