我该怎么做? 从这个样本开始
Id, Id2 CCC
[ (A123 A120 '2011-03'),
LL= (A133 A123 '2011-03'),
( D123 D120 '2011-04'),
(D140 D123 '2011-04'),]
我试图得到这个,为每个元组添加等级。
[(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]
最佳答案
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(LL,1)
告诉 enumerate
从 1 开始计数,我们可以使用 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)
这就是列表理解的每一行的构造方式。
关于python - 在 python 中创建元组的等级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780983/