Как добавить элемент счетчика к * каждому * повторяющемуся значению в кортеже?

#python #tuples #counter

#python #Кортежи #счетчик

Вопрос:

У меня есть список таких кортежей:

 [('bike', '1'), ('bike', '2'), ('car', '3'), ('car', '4')]
  

и я хочу считать каждый раз, когда появляется первый элемент, и добавлять его в конец кортежа

 [('bike', '1', '1'), ('bike', '2', '2'), ('car', '3', '1'), ('car', '4', '2')]
  

Я исследовал такие методы, как counter, но, похоже, это работает только для подсчета общего количества раз, когда появляется элемент. Я также нашел другие методы, которые, похоже, работают только для списков, а не для кортежей.

Комментарии:

1. «Я также нашел другие методы, которые, похоже, работают только для списков, а не для кортежей.» , есть ли какая-либо причина, по которой вам нужно, чтобы это был кортеж, или вы могли бы преобразовать его в список и обратно в кортеж? Кроме того, если ‘bike’ появляется дважды, не будет ли первым элементом: ['bike', '1', '2'] ?

2. В вашем коде нет кортежей.

3. Если я попытаюсь преобразовать его в список, я получу «объект кортежа не вызывается». Я бы не знал, как преобразовать его в список в противном случае

4. Вы говорите, что у вас есть список кортежей, но в вашем примере показан кортеж списков. Какой метод, который, казалось, работал для списков, но не для кортежей, вы пробовали? Что произошло?

5. Ок исправил вопрос, поэтому они на самом деле являются кортежами

Ответ №1:

Если вам нужен текущий счетчик, вы можете использовать defaultdict для его сохранения:

 from collections import defaultdict

data = [('bike', '1'), ('bike', '2'), ('car', '3'), ('car', '4')]

result = []
counts = defaultdict(lambda: 1)
for ele in data:
    k, v = ele
    result.append((k, v, counts[k]))
    counts[k] = counts[k]   1

print(result)
  

Вывод

 [('bike', '1', 1), ('bike', '2', 2), ('car', '3', 1), ('car', '4', 2)]
  

Ответ №2:

итак, у вас есть список кортежей, вы можете просто перебирать данные в списке, перемещать их в другой список и проверять новый список, если в нем есть этот элемент.