剛纔寫的功能...尋找更Python apporach
def nrofleadingchars(stringtotest, testchar='\t'):
count = 0
for c in stringtotest:
if c == testchar:
count = count + 1
else:
return count
return count
但是並不覺得Python的「足夠」,建議?
剛纔寫的功能...尋找更Python apporach
def nrofleadingchars(stringtotest, testchar='\t'):
count = 0
for c in stringtotest:
if c == testchar:
count = count + 1
else:
return count
return count
但是並不覺得Python的「足夠」,建議?
在我看來,代碼是直截了當的,所以你應該更喜歡它到一些不可讀的混亂。 我只想縮短了一點:
def nrofleadingchars(stringtotest, testchar='\t'):
count = 0
for c in stringtotest:
if c != testchar:
break
count += 1
return count
import itertools
def nrofleadingchars(stringtotest, testchar='\t'):
return len(list(itertools.takewhile(lambda x: x == testchar, stringtotest)))
由於需要構造一個列表,這對於具有非常大的前綴的事物可能效率較低。如果我打算潛在地處理這種情況,我可能會這樣寫:
def num_leading_chars(a_string, prefix='\t'):
for idx, char in enumerate(a_string):
if char != prefix:
return idx
return len(a_string)
我明白了,很多英里能夠爲我覆蓋,thanx! – Paul 2012-07-06 07:32:01
出於好奇 - 與OP相比,這段代碼的性能如何?我知道Python足以閱讀它,這對我來說似乎是一個相當性能的打擊。更重要的是,我真的認爲OP的代碼更具可讀性(但這只是一個偏好問題,我猜)。 – 2012-07-06 07:43:54
@NikolaAnusev'itertools'在C中實現。對於較大的輸入,它通常非常有效。對於小輸入來說,函數調用的開銷可能會使速度變慢......但對於小輸入,您通常不關心速度。但是,對於具有大量前綴大小的輸入,由於構建列表,這可能會*效率較低。我編輯了另一個版本,可以避免效率低下。 – Amber 2012-07-06 07:46:18
您可以剝離匹配的前導字符並根據長度計算差異。
def nrofleadingchars(stringtotest, testchar='\t'):
return (len(stringtotest) - len(stringtotest.lstrip(testchar))
這是更好的課程,我不知道可選的lstrip參數,thanx! – Paul 2012-07-06 07:31:29
這裏有一個非答案,但我不知道怎麼在這裏把這個信息。
如果表現也是一個考慮因素(它總是對我來說),這裏是一個當前答案的報告。
nrofleadingchars_orig | nrofleadingchars_1 | nrofleadingchars_it | num_leading_chars | nrofleadingchars_len ---------------------------------------------------------------------------------------------------------------------------------- nrofleadingchars_ori: 1.0 | 1.05393899527 | 0.603740407137 | 1.2923361749 | 23.1678811895 nrofleadingchars_1: 0.948821520491 | 1.0 | 0.572841891082 | 1.22619637446 | 21.9821842568 nrofleadingchars_it: 1.65634101706 | 1.74568238735 | 1.0 | 2.14054941432 | 38.3739118926 num_leading_chars: 0.773792469344 | 0.815530057691 | 0.467169780482 | 1.0 | 17.9271319951 nrofleadingchars_len: 0.0431632047756 | 0.045491384674 | 0.0260593708246 | 0.0557813709562 | 1.0
這些是時間比率。向下的第一列可以被讀爲「倍慢」。
也:'count + = 1'好一點。 – Keith 2012-07-06 07:33:27
是的,應該使用休息(對我很恥辱) – Paul 2012-07-06 07:35:29
哦,是的,我忘了:) – acondolu 2012-07-06 07:36:09