2013-08-10 2 views
0

Если есть список вроде этого:Как подсчитать элементы в списке списков строк

[['welcome','a1'],['welcome','a1'],['hello','a2'],['hello','a3']] 

и я хочу, чтобы вернуть что-то вроде этого:

[['welcome','a1', 2],['hello','a2', 1],['hello','a3', 1]]

Если же встречается пара строк в подсписке, увеличивайте количество

До сих пор:

counter = 0 
for i in mylist: 
    counter += 1 
    if i[0]== i[0]: 
    if i[1] == i[1]: 
     counter -= 1 
ouptut.append([mylist, counter]) 

Я новичок в этом, и я ценю вашу помощь!

+1

Это звучит как проблема со словарем, но вопрос неадекватен ... – jdero

+1

Как «привет» стал «привет»? –

+0

Не следует выводить результат: '[['welcome', 'a1', 2], ['hello', 'a3', 1], ['hello', 'a2', 1]]'? – arshajii

ответ

1

Используйте set здесь, чтобы получить только уникальные предметы:

>>> lis = [['welcome','a1'],['welcome','a1'],['hello','a2'],['hello','a3']] 
>>> [list(x) + [1] for x in set(map(tuple, lis))] 
>>> [['welcome', 'a1', 1], ['hello', 'a3', 1], ['hello', 'a2', 1]] 

Объяснение:

Set всегда возвращает уникальные элементы из итератора или итератора, но наборы могут содержать только неизменный элемент так, Вы сначала должны преобразовать их в кортеж. Подробный вариант кода выше, только разница в том, что будет также сохранить оригинал или

>>> lis = [['welcome','a1'],['welcome','a1'],['hello','a2'],['hello','a3']] 
>>> s = set() 
>>> for item in lis: 
...  tup = tuple(item) #covert to tuple 
...  s.add(tup) 
>>> s 
set([('welcome', 'a1'), ('hello', 'a3'), ('hello', 'a2')]) 

Теперь используйте список понимание, чтобы получить ожидаемый результат:

>>> [list(item) + [1] for item in s] 
[['welcome', 'a1', 1], ['hello', 'a3', 1], ['hello', 'a2', 1]] 

Если порядок элементов материи (sets не сохраняют порядок), а затем использовать это:

>>> seen = set() 
>>> ans = [] 
>>> for item in lis: 
...  tup = tuple(item) 
...  if tup not in seen: 
...   ans.append(item + [1]) 
...   seen.add(tup) 
...   
>>> ans 
[['welcome', 'a1', 1], ['hello', 'a2', 1], ['hello', 'a3', 1]] 

Я не уверен, что смысл использования 1 здесь.

+0

Я был * просто * собираюсь отредактировать свой ответ, чтобы включить эту точную вещь, +1 – arshajii

+0

Кажется, что она работает, но я не понимаю полностью ваш код, чтобы сделать это ... но спасибо – JPP

+0

почему list (x) + [ 1]? – JPP

Смежные вопросы