खोज…


वाक्य - विन्यास

  • फ़िल्टर (फ़ंक्शन, चलने योग्य)
  • itertools.ifilter (फ़ंक्शन, चलने योग्य)
  • future_builtins.filter (फ़ंक्शन, चलने योग्य)
  • itertools.ifilterfalse (फ़ंक्शन, चलने योग्य)
  • itertools.filterfalse (फ़ंक्शन, चलने योग्य)

पैरामीटर

पैरामीटर विवरण
समारोह कॉल करने योग्य जो स्थिति को निर्धारित करता है या None तो फ़िल्टरिंग के लिए पहचान फ़ंक्शन का उपयोग करें ( केवल स्थितीय )
iterable फ़िल्टर किया जा सकने योग्य ( केवल स्थितीय )

टिप्पणियों

ज्यादातर मामलों में एक समझ या जनरेटर अभिव्यक्ति अधिक पठनीय है, filter() या ifilter() तुलना में अधिक शक्तिशाली और अधिक कुशल है।

फ़िल्टर का मूल उपयोग

कुछ मानदंडों के आधार पर अनुक्रम के तत्वों को filter करने के लिए:

names = ['Fred', 'Wilma', 'Barney']

def long_name(name):
    return len(name) > 5
पायथन 2.x 2.0
filter(long_name, names)
# Out: ['Barney']

[name for name in names if len(name) > 5] # equivalent list comprehension
# Out: ['Barney']


from itertools import ifilter
ifilter(long_name, names)       # as generator (similar to python 3.x filter builtin)
# Out: <itertools.ifilter at 0x4197e10>
list(ifilter(long_name, names)) # equivalent to filter with lists
# Out: ['Barney']

(name for name in names if len(name) > 5) # equivalent generator expression
# Out: <generator object <genexpr> at 0x0000000003FD5D38>
पायथन 2.x 2.6
# Besides the options for older python 2.x versions there is a future_builtin function:
from future_builtins import filter
filter(long_name, names)       # identical to itertools.ifilter
# Out: <itertools.ifilter at 0x3eb0ba8>
अजगर 3.x 3.0
filter(long_name, names)        # returns a generator
# Out: <filter at 0x1fc6e443470>
list(filter(long_name, names))  # cast to list
# Out: ['Barney']

(name for name in names if len(name) > 5) # equivalent generator expression
# Out: <generator object <genexpr> at 0x000001C6F49BF4C0>

बिना फ़ंक्शन के फ़िल्टर करें

यदि फ़ंक्शन पैरामीटर None , तो पहचान फ़ंक्शन का उपयोग किया जाएगा:

list(filter(None, [1, 0, 2, [], '', 'a']))  # discards 0, [] and ''   
# Out: [1, 2, 'a']
अजगर 2.x 2.0.1
[i for i in [1, 0, 2, [], '', 'a'] if i] # equivalent list comprehension
अजगर 3.x 3.0.0
(i for i in [1, 0, 2, [], '', 'a'] if i) # equivalent generator expression

शॉर्ट-सर्किट चेक के रूप में फ़िल्टर करें

filter (python 3.x) और ifilter (python 2.x) एक जनरेटर लौटाते हैं ताकि वे शॉर्ट सर्किट टेस्ट जैसे or : and बनाते समय बहुत काम आ सकें।

अजगर 2.x 2.0.1
 # not recommended in real use but keeps the example short:
from itertools import ifilter as filter
पायथन 2.x 2.6.1
 from future_builtins import filter

पहला तत्व खोजने के लिए जो 100 से छोटा है:

car_shop = [('Toyota', 1000), ('rectangular tire', 80), ('Porsche', 5000)]
def find_something_smaller_than(name_value_tuple):
    print('Check {0}, {1}$'.format(*name_value_tuple)
    return name_value_tuple[1] < 100
next(filter(find_something_smaller_than, car_shop))
# Print: Check Toyota, 1000$
#        Check rectangular tire, 80$
# Out: ('rectangular tire', 80)

next -function अगले (इस मामले में पहले) तत्व देता है और इसलिए यही कारण है कि यह शॉर्ट-सर्किट है।

पूरक कार्य: फ़िल्टरफ़ल, इफिल्टरफ़लसे

itertools -module में filter लिए एक पूरक कार्य है:

अजगर 2.x 2.0.1
 # not recommended in real use but keeps the example valid for python 2.x and python 3.x
from itertools import ifilterfalse as filterfalse
अजगर 3.x 3.0.0
from itertools import filterfalse

जो बिल्कुल जेनरेटर filter तरह काम करता है, लेकिन केवल उन तत्वों को रखता है जो False :

# Usage without function (None):
list(filterfalse(None, [1, 0, 2, [], '', 'a']))  # discards 1, 2, 'a' 
# Out: [0, [], '']

# Usage with function
names = ['Fred', 'Wilma', 'Barney']

def long_name(name):
    return len(name) > 5

list(filterfalse(long_name, names))
# Out: ['Fred', 'Wilma']

# Short-circuit useage with next:
car_shop = [('Toyota', 1000), ('rectangular tire', 80), ('Porsche', 5000)]
def find_something_smaller_than(name_value_tuple):
    print('Check {0}, {1}$'.format(*name_value_tuple)
    return name_value_tuple[1] < 100
next(filterfalse(find_something_smaller_than, car_shop))
# Print: Check Toyota, 1000$
# Out: ('Toyota', 1000)

# Using an equivalent generator:
car_shop = [('Toyota', 1000), ('rectangular tire', 80), ('Porsche', 5000)]
generator = (car for car in car_shop if not car[1] < 100)
next(generator)


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow