Обнаружение Уникальных Терминов В Списке, Состоящем из Нескольких Строк

#python #python-3.x #string #list #function

#питон #python-3.x #строка #Список #функция

Вопрос:

 example = ["duran duran sang wild boys in 1984", "wild boys don't remain forever wild", "who brought wild flowers","it was john krakauer who wrote in to the wild"]  

Как мне определить уникальные термины и поместить их в такой список:

 ['duran', 'sang', 'wild', 'boys', 'in', '1984', "don't", 'remain', 'forever', 'who', 'brought', 'flowers', 'it', 'was', 'john',  'krakauer', 'wrote', 'to', 'the']  

Мой код:

 def uniqueterms(a, d, e, f) :   b = a.split()  c = [] `   for x in b:  if a.count(x) gt;= 1 and (x not in c):  c.append(x)  print((' '.join(c)).split(), end=' ')  g = d.split()  h = []   for y in g:  if d.count(y) gt;= 1 and (y not in h):  h.append(y)  print((' '.join(h)).split(), end=' ')  i = e.split()  j = []   for z in i:  if e.count(z) gt;= 1 and (z not in j):  j.append(z)  print((' '.join(j)).split(), end=' ')  k = f.split()  m = []   for t in k:  if f.count(t) gt;= 1 and (t not in m):  m.append(t)  print((' '.join(m)).split())  gt;gt;gt; uniqueterms(example[0], example[1], example[2], example[3]) ['duran', 'sang', 'wild', 'boys', 'in', '1984'] ['wild', 'boys', "don't", 'remain', 'forever'] ['who', 'brought', 'wild', 'flowers'] ['it', 'was', 'john', 'krakauer', 'who', 'wrote', 'in', 'to', 'the', 'wild']  

Ответ №1:

*Обновлено, чтобы возвращать уникальные слова в порядке их появления. Предыдущая версия, использующая python set (), не была чувствительна к порядку ввода:

 def get_unique_words(text):  visited = set()  uniq = []  for word in text.split():  if word not in visited:  uniq.append(word)  visited.add(word)  return uniq  

Для обработки списка строк:

 def get_unique_words_from_list_of_strings(str_list):  return get_unique_words(' '.join(str_list))  

Чтобы привести свой пример:

 words_in_order = get_unique_words_from_list_of_strings(example)  

который возвращает

 ['duran', 'sang', 'wild', 'boys', 'in', '1984', "don't", 'remain', 'forever', 'who', 'brought', 'flowers', 'it', 'was', 'john', 'krakauer', 'wrote', 'to', 'the']  

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

1. Чтобы сделать решение полным, вы должны использовать его как get_unique_words(' '.join(example))

2. хорошо, это сработало, но теперь как мне отсортировать список ?

3. обновлено, чтобы включить порядок сортировки списка

4. каждый раз, когда я запускаю его, он выдает случайный вывод, поэтому я не могу получить этот вывод с помощью известных мне способов какой-либо помощи ? [«дюран», «пел», «дикий», «мальчики», «в», «1984», «не», «останься», «навсегда», «кто», «принес», «цветы», «это», «был», «джон», «кракауэр», «написал», «кому», «тот»]

5. Ааа, хорошо, вы хотите, чтобы они были отсортированы в порядке появления в исходном списке строк. Это немного сложнее, на один момент.