首頁  >  文章  >  後端開發  >  如何有效測試 Python 清單中多個值的成員資格:迭代、集合或 all()?

如何有效測試 Python 清單中多個值的成員資格:迭代、集合或 all()?

Linda Hamilton
Linda Hamilton原創
2024-10-30 11:45:05285瀏覽

How to Efficiently Test Membership of Multiple Values in a Python List: Iterating, Sets, or all()?

透過迭代測試清單中多個值的成員資格

測試清單中多個值的成員資格時,Python 的行為可能會令人困惑。在['b', 'a', 'foo', 'bar']中使用'a','b'返回('a', True),表示結果為元組,其中第一個元素為第一個值檢查,第二個元素是該值的成員資格。要測試列表中多個值的成員資格,建議使用以下方法:

all(x in ['b', 'a', 'foo', 'bar'] for x in ['a', 'b'])

此語句使用all() 函數中的生成器表達式來測試第二個列表中的每個值的成員資格第一個。

替代方法

雖然基於迭代的方法通常是可靠的,但也存在替代方法。使用集合提供了子集測試選項:

set(['a', 'b']).issubset(set(['a', 'b', 'foo', 'bar']))

但是,集合只能包含可雜湊元素,限制了它們的應用。

速度注意事項

子集測試通常更快,但只有當容器和項目都很小時,差異才顯著。在大多數情況下,使用 all() 函數仍然有效。

如果項目已經在清單中,在使用子集測試之前將它們轉換為集合可以提供輕微的加速。不建議將非集合的容器轉換為集合,因為加速效果很小,而且額外的儲存開銷可能會產生問題。

例外情況

何時測試大量值的成員資格,特別是如果某些值不在容器中,all() 可以比子集測試提供顯著的速度優勢。這是由於其短路行為,使其能夠繞過容器中不存在的測試元素。

摘要

對於一般用途,將如果集合的元素是可散列的,則建議將其容器化。只有當測試項目已儲存在集合中時,子集測試才有優勢。在某些情況下,例如測試大量值的成員資格,all() 可以提供卓越的效能。

以上是如何有效測試 Python 清單中多個值的成員資格:迭代、集合或 all()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn