2017-07-07 49 views
-2

我正在使用Python 2.4,我需要使用任何在我的Python版本中不可用的函數。python:內置函數「任何」的替代方法

有沒有可以用來代替它的函數或表達式?

我需要找到至少一個字符串列表中的一個元素是否在文本行中。

+2

有同等版本在文檔本身:https://docs.python.org/3/library/functions.html#any –

+0

好的,謝謝。但我不確定如何使用它。我的列表包含不是布爾值的字符串。 – tsumey

+2

現在是時候使用'grep'升級你的Python版本 –

回答

0

any函數相當容易重新實現。

這個想法只是迭代一個迭代,只要找到一個真值對象,就返回True;否則返回False。

沒有作弊,並在文檔偷看,這裏是一個重實:

def my_any(iterable): 
    for it_element in iterable: 
     if it_element: 
      return True 
    return False 

現在用the doc's version

def any(iterable): 
    for element in iterable: 
     if element: 
      return True 
    return False 

就是這麼簡單,我的版本是完全一樣的文檔的。

關於如何使用它... any函數需要迭代。 它通常用於列表或生成器表達式。 舉例來說,如果你想檢查的'abcd'任何字符是在line字符串:

any(it_character in line for it_character in 'abcd') 
+0

謝謝,但我正在使用數百萬行,我正在尋找一種不耗時的方式來做到這一點;使用循環似乎不是最好的方法。我可能錯了。 – tsumey

+1

@tsumey那麼你的具體問題是關於「任何」方法,所以在這裏你去。現在如果你想在一個大文件中找到一個pettern,你可能需要迭代它,所以一個循環將是必要的。沒有魔法功能會告訴你'它在125,327行'沒有迭代。 –

+0

好的,我將使用doc解決方案,謝謝。 – tsumey

1

爲了您的具體使用情況下(即「破發」是可選的):

ans = False 
for string in lst: 
    if string in line: 
     ans = True 
     break 
+0

謝謝,請看看我對@Right腿的回答。 – tsumey

+1

「any」函數基本上執行循環,儘管它可能會被優化。在某種程度上,你必須查看列表中的每個字符串(至少在你找到一個可用的字符串之前),所以需要類似循環的東西。如果找到一場比賽,休息可以讓你提前退出。 – perigon

相關問題