2014-12-01 3 views
2

Я, наконец, отфильтровал свой сценарий, чтобы просто выводить то, что я хочу. И это работает ... половина!Подсчет строк в python без использования текстового файла

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

Это не самая большая проблема, хотя, и я уже исправил ее. С помощью следующего кода;

for friend in friends: 
    if friend['type'] == 0: 
     names = friend[u'name'] 
     print names 

печатает имена хорошо, мои результаты, например, являются:

test.account2 
test.account3 
test.account4 
etc... 

Это является удивительным, до сих пор.

Теперь я хочу посчитать, сколько друзей на самом деле и напечатать это число.

Так что в этом случае число будет 3 (очевидно, не принимая «и т.д.» в виду)

Хотя, я пытался, Len, граф, str.count и много других вещей, но он просто не работает. Прежде всего, он печатает его 3 раза, что я получаю из-за его отступа. Но перемещение отступа назад, делает его «забыть» names

И до сих пор единственным, что я сведущий сделать это распечатать счетчик письма для всех 3-х имен следующим образом:

13 
13 
13 

Am Я что-то забыл или просто глуп?

Помощь приветствуется!

+0

Что вы имели в виду «но это просто не работает»? Встроенная функция len() должна возвращать действительную длину массива. Каков тип переменной друзей? – Ivan

+0

вы можете вставить свой полный код ?. Вы знаете об пространствах имен? Получение 'names' из' if' делает его свободным. Поэтому 'print names' должен давать ошибку, потому что' names' не определен. – Netro

+0

Действительно, переменные 'names' следует называть' name' вместо. Это может помочь вам подумать о том, что вы делаете. –

ответ

3

Ваша переменная names не является массивом. Он просто сохраняет имя текущего друга, так как friends зацикливается. Следовательно, вы также 3 раза получаете длину 13, так как это только количество символов этой конкретной строки имени, как это встречается.

Чтобы получить массив имен вы можете сделать это:

names = [] 
for friend in friends: 
    if friend['type'] == 0: 
     names.append(friend[u'name']) 

Или проще:

names = [friend[u'name'] for friend in friends if friend['type'] == 0] 

Тогда len(names) обеспечит подсчет имен.

+0

Большое спасибо, он работает как шарм! – Snowlav

3

Вы видите 13 потому, что длина каждого имени test.account2 и т.д. Это происходит потому, что вы назвали len на names как этот len(names), который не то, что вы хотите.

Инициализировать список выше вашего для цикла: name_list = [] и добавлять имена к этому списку:

name_list = [] 
for friend in friends: 
    if friend['type'] == 0: 
     names = friend[u'name'] 
     print names 
     name_list.append(names) 

print 'Added %d names' % (len(name_list)) 

Окончательный print теперь должен сбросить 3 за ваш пример.

+0

Спасибо за ваш вклад, определенно помог мне :) – Snowlav

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