#python #tuples #rank
#python #кортежи #ранг
Вопрос:
Как мне это сделать? начиная с этого примера
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]
Ответ №1:
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)
, и мы можем поместить ранг в конец строки, используя представление списка:
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)
Вот как строится каждая строка понимания списка.
Комментарии:
1. Что-то странное с этим. Используя LL = pprint.pprint([строка (i,) для i, строка в enumerate(LL,1)]). Чтобы продолжить обработку LL. И получите ошибки. LL должен оставаться в виде списка.
2. @user428862: Переопределить
LL
использованиеLL = [row (i,) for i,row in enumerate(LL,1)]
.
Ответ №2:
Вы можете использовать enumerate для создания переменных ранга (добавлено 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)]
Ответ №3:
для i в диапазоне (len(LL)): RowId = i 1 Заполняем[i].добавляем(RowId)
Пожалуйста, протестируйте это.
Комментарии:
1. ооо. вы не можете добавлять элементы в кортеж после того, как они созданы 🙂 Почему бы вам не использовать список вместо этого?