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)
这是怎样的列表理解的每一行构造。
这件事情有点奇怪。使用LL = pprint.pprint([row +(i,)for i,row in enumerate(LL,1)])。要继续处理LL。并获得错误。 LL需要保持列表类型。 – Merlin 2011-04-25 17:56:00
@ user428862:重新定义'LL'使用'LL = [row +(i,)for i,row in enumerate(LL,1)]''。 – unutbu 2011-04-25 18:11:28
好的,完成了! T,你能解释一下你做了什么吗? – Merlin 2011-04-25 18:18:29