Как объединить элементы в списке, как сравнить 2 элемента в списке

1

Я новичок в программировании, имея вопрос:

У меня есть два списка:

list = ["ich", "du", "etc", "."]
abbr = ["etc.", "U.S"]

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

list = ["ich", "du", "etc."]

Моя проблема заключается в том, как объединить их и как присоединиться к элементу к следующему элементу. Как я могу использовать здесь следующий элемент вместо "."

for elem in list:
if ''.join((elem, ".")) in abbr:
  • 0
    Неправильно понял, извини мой плохой
Теги:
list

3 ответа

3
Лучший ответ

Вы можете заархивировать последовательность списка и себя с одним индексом, дополняя лишнюю пустую строку в конце, чтобы вы могли перебирать последовательность в парах, объединять пару, когда они находятся в списке сокращений (который более эффективный как набор) и пропустить следующую пару, так как следующая строка уже была объединена:

lst = ["ich", "du", "etc", "."]
abbr = {"etc.", "U.S"}
pairs = zip(lst, lst[1:] + [''])
merged = []
for a, b in pairs:
    ab = a + b
    if ab in abbr:
        merged.append(ab)
        next(pairs, None)
    else:
        merged.append(a)
print(merged)

Эти результаты:

['ich', 'du', 'etc.']

Обратите внимание: если вы используете Python 2.7 или более ранние версии, вы можете инициализировать pairs с добавленной функцией iter:

pairs = iter(zip(lst, lst[1:] + ['']))
  • 0
    Это не будет работать в python2, потому что zip создает список в python2
  • 0
    Я обновил свой ответ решением для Python 2 тогда.
Показать ещё 1 комментарий
1

Вы можете так:

for elem, nextelem in zip(list,list[1:]):
0

Вы можете сделать что-то вроде ниже

lst = ["ich", "du", "etc", "."]
abbr = ["etc.", "U.S"]

for elem, nextelem in zip(lst[:-1],lst[1:]):
  if elem + nextelem in abbr:
    lst.remove(elem)
    lst.remove(nextelem)
    lst.append(elem + nextelem)

print(lst)

Выход

['ich', 'du', 'etc.']
  • 1
    Использование метода remove не только неэффективно (так как требует O (n)), но и опасно, когда в списке есть несколько вхождений данного значения (так как он удаляет первое найденное совпадение, которое может быть не тем, которое должно быть объединенный).
  • 0
    @blhsing Да, согласился, это был подход к решению и не учитывалось повторяющихся значений. Ваше решение определенно лучше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню