2015-07-01 74 views
-1

我試圖計算列表中一個字符串的長度超過20個字符的次數。Python 2.7計數字符串的數量

我想使用的計數方法,這就是我不斷收到:

>>> for line in lines: 
     x = len(line) > 20 
     print line.count(x) 

編輯:對不起,壓痕錯誤之前

+2

您有錯誤的縮進以及代碼。 – DhruvPathak

+0

你在哪裏見過像這樣使用'.count'方法? 'str.count(x)'返回'x'的非重疊事件的數量。這裏你的'x'或者是'True'或者'False',即。甚至沒有一個str。這就是爲什麼你得到這個錯誤信息。 –

+0

如何使用'len(filter(lambda x:len(x)> 20,lines))'? – Pant

回答

3

想你指的這個,

>>> s = ['sdgsdgdsgjhsdgjgsdjsdgjsd', 'ads', 'dashkahdkdahkadhaddaad'] 
>>> cnt = 0 
>>> for i in s: 
     if len(i) > 20: 
      cnt += 1 


>>> cnt 
2 

>>> sum(1 if len(i) > 20 else 0 for i in s) 
2 

>>> sum(len(i) > 20 for i in s) 
2 
+0

是的,謝謝。 – ironrose

+0

或者只是'cnt = sum(len(i)> 20 for i in s)'? –

+1

@JonClements我是第一個。 –

0

在這種情況下,

x = len(line) > 20 

x是一個布爾值,在一個字符串,它不能被 「計數」。

>>> 'a'.count(False) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: expected a character buffer object 

您需要實際擁有一個字符串或類似的類型(統一碼等)才能計入行中。

0

我建議使用一個簡單的計數器爲你的目的:

count = 0 
for line in lines: 
    if len(line) > 20: 
     count += 1 
print count 
0
>>> for line in lines: 
...  x = len(line) > 20 

這裏,x是一個布爾型(True或在Python False),因爲len(line) > 20是一個邏輯表達式。

您可以通過調試找出問題:

>>> for line in lines: 
...  x = len(line) > 20 
...  print x 

此外,x = len(line) > 20不是一個條件表達式。您需要使用if表達式:

>>> count = 0 
>>> for line in lines:  
...  if len(line) > 20: 
...   count += 1  
... 
>>> print count