2016-10-09 6 views
1

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

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

+0

Вы пробовали отладчик? Вы можете легко наблюдать, какие значения listA или listB имеют на каждом этапе итерации. – Rockbar

+0

Вы смотрите на заданную операцию пересечения. –

+5

'list (setA) & set (listB))' вернет именно то, что вы хотите, как показано [здесь] (http://stackoverflow.com/questions/642763/python-intersection-of-two-lists) , – Efferalgan

ответ

1

Я предполагаю, что отступ правилен в вашем коде. Продолжая свою стратегию, этот код должен работать.

def compareLists(self, listA, listB): 
    sameWords = list() 

    for a in xrange(0,len(listA)): 
     for b in xrange(0,len(listB)): 
      if listA[a] == listB[b]: 
       sameWords.append(listA[a]) 
    return sameWords 

В качестве альтернативы, как предложил Эффералган, просто установите пересечение.

def compareLists(self, listA, listB): 
    return list(set(listA) & set(listB)) 

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

Как вы сказали, вы читаете строки из текстового файла, и похоже, что строки новой строки все еще там.

my_text_list = [s for s in open("my_text.txt").read().rsplit()] 
+0

Он все еще не работает. Я уверен, что это из-за файла .txt, но я могу распечатать его в виде списка, чтобы импортировать его правильно. Может быть, файл слишком велик? Он имеет около 15 000 строк. –

+0

. Размер списка не должен иметь значения, он не * * * большой. Распечатайте список и визуально проверьте, что слова в нем - то, что вы ожидаете. – Efferalgan

+0

15 000 строк должны быть в порядке. Не могли бы вы опубликовать список, который вы напечатали? –