сравнение элементов в списке списков - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть список таких списков: [['sd', 'pd', 'od'], ['sd', 'pd1', 'od2'], ['sd2', 'pd2', 'od']] и я хочу, чтобы вывод был ['sd pd od ; pd1 od2 .', 'sd2 pd2 od .'] Итак, я хочу сравнить первый элемент каждого списка друг с другом, и если они совпадают, я хочу пропустить первый элемент (который встречается во втором списке).

Вот мой код, который не работает, так как слишком сильно сравнивает элементы, и я не знаю почему.

def simplistic(triples):
base = []
for x in triples:
    for y in triples:
        if x[0] == y[0]:
            base.append((x[:],y[1],y[2]))
print(base)

Вывод этого кода:

[(['sd', 'pd', 'od'], 'pd', 'od'), (['sd', 'pd', 'od'], 'pd1', 'od2'), (['sd', 'pd1', 'od2'], 'pd', 'od'), (['sd', 'pd1', 'od2'], 'pd1', 'od2'), (['sd2', 'pd2', 'od'], 'pd2', 'od')]

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

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

>>> from collections import defaultdict
>>> triples =  [['sd', 'pd', 'od'], ['sd', 'pd1', 'od2'], ['sd2', 'pd2', 'od']]
>>> d = defaultdict(list)
>>> 
>>> for k,*l in triples:
...     d[k].extend(l)
...
>>> res = [[k]+l for k,l in d.items()]
>>> print(res)
[['sd', 'pd', 'od', 'pd1', 'od2'], ['sd2', 'pd2', 'od']]
0 голосов
/ 08 сентября 2018

Поскольку ваш вопрос немного неясен, попробуйте это и проверьте, нормально это или нет.

bad_list = []
f=''
for i,s in enumerate(l):
    if s[0] == l[i-1][0] or s[0] in bad_list:
        f = f + ' '.join(s[1:])
        bad_list.append(s[0])           
    else:
        f = f + ' '.join(s)
    f = f+ ' ;'
f = [f[:-1] + '.']

f будет вашим ожидаемым результатом.

...