2014-01-02 2 views
1

Может кто-то помочь мне устранить неисправность моего кода. У меня есть два списка.Python для списка счетчиков циклов - счетчик не работает

A = [['2925750', ' Everything he mentioned, I could have evaluated on my own'], ['2925750', ' I do wish he could have shown us more at this point that could have set the fox apart.']] 

B = ['mentioned','evaluated','fox','wish'] 

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

Результат должен быть что-то вроде:

[(['2925750', ' Everything he mentioned, I could have evaluated on my own'], 0), (['2925750', ' I do wish he could have shown us more at this point that could have set the Equinox apart.'], 0)] 

проблема - мой счет равен нулю.

Ниже приведен мой код. Заранее благодарю вас:

Y = [] 


##Find Matches 
for sent in A: 
    for sent in B: 
     Y.append((sent, sum(sent.count(col) for col in B))) 

спасибо.

ответ

2
  • Вы использовали 'sent' дважды.

  • Вам не нужна петля для B.

  • 'A' является списком списков.

Мой фикс:

Y = [] 
A = [['2925750', ' Everything he mentioned, I could have evaluated on my own'], ['2925750', ' I do wish he could have shown us more at this point that could have set the fox apart.']] 
B = ['mentioned','evaluated','fox','wish'] 

for sent in A: 
    o = 0 
    for i in sent: 
     o +=sum(i.count(col) for col in B) 
    Y.append((sent, o)) 

Y:

[([ '2925750', 'Все, что он говорил, я мог бы оцениваться на мой собственный'], 2) , (['2925750', 'Мне бы хотелось, чтобы он показал нам больше на этот пункт, который мог бы установить лису.'], 2)]

+0

Работал отлично. Спасибо огромное! – BlackHat

5

Переменная sent в for sent in B затмевает переменную в for sent in A. Или, точнее, присваивает одно имя (та же переменная).

Вы должны переименовать один из них.

Также обратите внимание, что вы уже перебираете B внутри sum. Во внутреннем цикле вы, вероятно, предназначались для итерации по каждому из списков в A.

for lst in A: 
    for sent in lst: 
     Y.append((sent, sum(sent.count(col) for col in B))) 
2

Вы не можете использовать sent в качестве итератора для обеих петель, как это все еще находится в области видимости.

Смежные вопросы