Я новичок в программировании, имея вопрос:
У меня есть два списка:
list = ["ich", "du", "etc", "."]
abbr = ["etc.", "U.S"]
Мне нужно определить аббревиатуры в первом списке, используя список данных сокращений во втором. Мне нужно пройти через элементы первого списка, и если элемент списка и следующий элемент списка вместе содержатся в списке сокращений, затем слейте их оба, чтобы получить список, например,
list = ["ich", "du", "etc."]
Моя проблема заключается в том, как объединить их и как присоединиться к элементу к следующему элементу. Как я могу использовать здесь следующий элемент вместо "."
for elem in list:
if ''.join((elem, ".")) in abbr:
Вы можете заархивировать последовательность списка и себя с одним индексом, дополняя лишнюю пустую строку в конце, чтобы вы могли перебирать последовательность в парах, объединять пару, когда они находятся в списке сокращений (который более эффективный как набор) и пропустить следующую пару, так как следующая строка уже была объединена:
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:] + ['']))
Вы можете так:
for elem, nextelem in zip(list,list[1:]):
Вы можете сделать что-то вроде ниже
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.']
remove
не только неэффективно (так как требует O (n)), но и опасно, когда в списке есть несколько вхождений данного значения (так как он удаляет первое найденное совпадение, которое может быть не тем, которое должно быть объединенный).