Χρήσιμες κώδικα που χρησιμοποιεί μείωση ();

ψήφοι
113

Υπάρχει κάποιος εδώ έχει καμία χρήσιμη κώδικα που χρησιμοποιεί μείωση () συνάρτηση με πύθωνα; Υπάρχει κάποιος κώδικας, εκτός από το συνηθισμένο + και * που βλέπουμε στα παραδείγματα;

Ανατρέξτε Τύχη της να μειώσει () στην Python 3000 από GVR

Δημοσιεύθηκε 19/08/2008 στις 10:16
πηγή χρήστη
Σε άλλες γλώσσες...                            


24 απαντήσεις

ψήφοι
3

Δεν είμαι σίγουρος αν αυτό είναι ό, τι είστε μετά, αλλά μπορείτε να αναζητήσετε τον πηγαίο κώδικα στο Google .

Ακολουθήστε το link για μια αναζήτηση για «λειτουργία: μείωση () lang: python» στην αναζήτηση Κώδικα Google

Με την πρώτη ματιά τα ακόλουθα έργα που χρησιμοποιούν reduce()

  • MoinMoin
  • Zope
  • Αριθμητικός
  • ScientificPython

κλπ κλπ, αλλά τότε αυτά είναι περίεργο δεδομένου ότι είναι τεράστια έργα.

Η λειτουργικότητα της μείωση μπορεί να γίνει χρησιμοποιώντας τη λειτουργία αναδρομή που υποθέτω Guido ότι ήταν πιο σαφής.

Εκσυγχρονίζω:

Από Κώδικας αναζήτησης της Google διεκόπη στις 15-Ιαν-2012, εκτός από την επιστροφή στο κανονικό αναζητήσεις του Google, υπάρχει κάτι που ονομάζεται αποσπάσματα κώδικα συλλογής που φαίνεται πολλά υποσχόμενο. Μια σειρά από άλλες πηγές αναφέρονται στην απάντηση αυτή (κλειστό) θέμα αντικατάστασης για το Google Code Search; .

Ενημέρωση 2 (29-Μαΐου-2017):

Μια καλή πηγή για Python παραδείγματα (σε κώδικα open-source) είναι η μηχανή αναζήτησης Nullege .

Απαντήθηκε 19/08/2008 στις 11:16
πηγή χρήστη

ψήφοι
1

Έχω ένα παλιό εφαρμογή Python των pipegrep που χρησιμοποιεί τη μείωση και τη μονάδα glob για να οικοδομήσουμε μια λίστα με τα αρχεία με τη διαδικασία:

files = []
files.extend(reduce(lambda x, y: x + y, map(glob.glob, args)))

Το βρήκα βολικό εκείνη την εποχή, αλλά δεν είναι πραγματικά απαραίτητο, καθώς κάτι παρόμοιο είναι εξίσου καλή, και ίσως πιο ευανάγνωστο

files = []
for f in args:
    files.extend(glob.glob(f))
Απαντήθηκε 19/08/2008 στις 11:43
πηγή χρήστη

ψήφοι
7

@Blair Conrad: Θα μπορούσατε επίσης να εφαρμόσει glob σας / να μειώσει τη χρήση ποσού, όπως αυτό:

files = sum([glob.glob(f) for f in args], [])

Αυτό είναι λιγότερο φλύαρη από ένα από τα δύο παραδείγματα σας, είναι απολύτως Pythonic, και εξακολουθεί να είναι μόνο μία γραμμή κώδικα.

Έτσι για να δοθεί απάντηση στο αρχικό ερώτημα, εγώ προσωπικά προσπαθήστε να αποφύγετε τη χρήση μειώσει γιατί είναι ποτέ πραγματικά αναγκαία και θεωρώ ότι είναι λιγότερο σαφής σε σχέση με άλλες προσεγγίσεις. Ωστόσο, μερικοί άνθρωποι συνηθίζουν να μειώσει και να έρθει να το προτιμούν στη λίστα Η κατανόηση (ειδικά Haskell προγραμματιστές). Αλλά αν δεν είστε ήδη σκεφτόμαστε ένα πρόβλημα όσον αφορά τη μείωση, τότε μάλλον δεν χρειάζεται να ανησυχείτε για τη χρήση του.

Απαντήθηκε 19/08/2008 στις 12:57
πηγή χρήστη

ψήφοι
3

Μετά την εντολή grep τον κωδικό μου, φαίνεται ότι το μόνο πράγμα που έχω χρησιμοποιήσει μείωση των υπολογίζει το παραγοντικό:

reduce(operator.mul, xrange(1, x+1) or (1,))
Απαντήθηκε 21/08/2008 στις 20:40
πηγή χρήστη

ψήφοι
11

Η χρήση του reduceότι βρήκα τον κωδικό μου αφορούσε την κατάσταση όπου είχα κάποια ταξική δομή για τη λογική έκφραση και είχα ανάγκη να μετατρέψει έναν κατάλογο των αντικειμένων αυτών έκφραση σε ένα συνδυασμό των εκφράσεων. Είχα ήδη μια λειτουργία make_andγια να δημιουργήσετε ένα συνδυασμό δίνονται δύο εκφράσεις, έτσι έγραψα reduce(make_and,l). (Ήξερα ότι η λίστα δεν ήταν άδειο? Αλλιώς θα ήταν κάτι σαν reduce(make_and,l,make_true)).

Αυτός ακριβώς είναι ο λόγος για τον οποίο (μερικοί) λειτουργική προγραμματιστές όπως reducefold λειτουργίες, όπως οι λειτουργίες αυτές συνήθως ονομάζονται). Συχνά υπάρχουν ήδη πολλές δυαδικές λειτουργίες όπως +, *, min, max, συνένωση και, στην περίπτωσή μου, make_andκαι make_or. Έχοντας μια reduceκαθιστά ασήμαντο για να άρει αυτές τις ενέργειες στις λίστες (ή δέντρα ή ό, τι έχεις, για φορές λειτουργεί σε γενικές γραμμές).

Φυσικά, αν ορισμένα στιγμιότυπα (όπως sumείναι) που χρησιμοποιείται συχνά, τότε δεν θέλετε να κρατήσετε γραπτώς reduce. Ωστόσο, αντί για τον καθορισμό της sumμε κάποια for-loop, μπορείτε να απλά να καθορίσει το ίδιο εύκολα με reduce.

Αναγνωσιμότητα, όπως αναφέρθηκε από τους άλλους, είναι πράγματι ένα ζήτημα. Θα μπορούσε να ισχυριστεί, ωστόσο, ότι μόνος λόγος για τον οποίο οι άνθρωποι βρίσκουν reduceλιγότερο «καθαρό» είναι επειδή δεν είναι μια λειτουργία που πολλοί άνθρωποι ξέρουν ή / και τη χρήση.

Απαντήθηκε 03/09/2008 στις 12:27
πηγή χρήστη

ψήφοι
63

Οι άλλες χρήσεις που έχω βρεθεί για αυτό, εκτός + και * ήταν με και ή, αλλά τώρα έχουμε anyκαι allτην αντικατάσταση αυτών των περιπτώσεων.

foldlκαι foldrέρχονται σε Σχήμα πολλά ...

Εδώ είναι μερικά χαριτωμένα χρήσεις:

Ισιώστε μια λίστα

Στόχος: μετατρέψει [[1, 2, 3], [4, 5], [6, 7, 8]]σε [1, 2, 3, 4, 5, 6, 7, 8].

reduce(list.__add__, [[1, 2, 3], [4, 5], [6, 7, 8]], [])

Λίστα ψηφία ενός αριθμού

Στόχος: μετατρέψει [1, 2, 3, 4, 5, 6, 7, 8]σε 12345678.

Άσχημο, αργό τρόπο:

int("".join(map(str, [1,2,3,4,5,6,7,8])))

Αρκετά reduceτρόπο:

reduce(lambda a,d: 10*a+d, [1,2,3,4,5,6,7,8], 0)
Απαντήθηκε 11/11/2008 στις 06:29
πηγή χρήστη

ψήφοι
47

reduce()μπορεί να χρησιμοποιηθεί για να βρουν ελάχιστο κοινό πολλαπλάσιο για 3 ή περισσότερους αριθμούς :

#!/usr/bin/env python
from fractions import gcd
from functools import reduce

def lcm(*args):
    return reduce(lambda a,b: a * b // gcd(a, b), args)

Παράδειγμα:

>>> lcm(100, 23, 98)
112700
>>> lcm(*range(1, 20))
232792560
Απαντήθηκε 11/11/2008 στις 20:33
πηγή χρήστη

ψήφοι
35

reduce()θα μπορούσε να χρησιμοποιηθεί για την επίλυση διακεκομμένη ονόματα (όπου eval()είναι πολύ ασφαλές να χρησιμοποιήσει):

>>> import __main__
>>> reduce(getattr, "os.path.abspath".split('.'), __main__)
<function abspath at 0x009AB530>
Απαντήθηκε 12/11/2008 στις 00:02
πηγή χρήστη

ψήφοι
3

Γράφω μια λειτουργία σύνταξης για τη γλώσσα, γι 'αυτό την κατασκευή του αποτελείται λειτουργία με μείωση του μαζί με εφαρμόσει χειριστή μου.

Με λίγα λόγια, συνθέτουν παίρνει μια λίστα με τις λειτουργίες για να συνθέσει σε μια ενιαία λειτουργία. Αν έχω μια σύνθετη λειτουργία που εφαρμόζεται σε στάδια, θέλω να το πούμε όλοι μαζί σαν αυτό:

complexop = compose(stage4, stage3, stage2, stage1)

Με αυτό τον τρόπο, θα μπορεί στη συνέχεια να εφαρμοστεί σε μια έκφραση όπως έτσι:

complexop(expression)

Και θέλω να είναι ισοδύναμη με:

stage4(stage3(stage2(stage1(expression))))

Τώρα, για την κατασκευή των εσωτερικών αντικειμένων μου, θέλω να πω:

Lambda([Symbol('x')], Apply(stage4, Apply(stage3, Apply(stage2, Apply(stage1, Symbol('x'))))))

(Η τάξη Lambda χτίζει μια συνάρτηση οριζόμενη από το χρήστη, και Εφαρμόστε χτίζει μια εφαρμογή λειτουργία.)

Τώρα, να μειώσει, δυστυχώς, διπλώνει το λάθος τρόπο, γι 'αυτό διαλυθεί, χρησιμοποιώντας, κατά προσέγγιση:

reduce(lambda x,y: Apply(y, x), reversed(args + [Symbol('x')]))

Για να καταλάβω τι μειώσει παράγει, δοκιμάστε αυτά στο REPL:

reduce(lambda x, y: (x, y), range(1, 11))
reduce(lambda x, y: (y, x), reversed(range(1, 11)))
Απαντήθηκε 23/04/2010 στις 19:34
πηγή χρήστη

ψήφοι
20

Βρείτε τη διασταύρωση της Ν δοθεί λίστες:

input_list = [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7]]

result = reduce(set.intersection, map(set, input_list))

αποδόσεις:

result = set([3, 4, 5])

μέσω: Python - τομής των δύο λιστών

Απαντήθηκε 17/07/2010 στις 16:05
πηγή χρήστη

ψήφοι
7

Θα μπορούσατε να αντικαταστήσετε value = json_obj['a']['b']['c']['d']['e']με:

value = reduce(dict.__getitem__, 'abcde', json_obj)

Αν έχετε ήδη το δρόμο a/b/c/..σε μια λίστα. Για παράδειγμα, Αλλαγή τιμές σε dict των ένθετων DICTS χρησιμοποιώντας τα στοιχεία σε μια λίστα .

Απαντήθηκε 19/08/2012 στις 10:15
πηγή χρήστη

ψήφοι
11

Νομίζω μείωση είναι μια ανόητη εντολή. Ως εκ τούτου:

reduce(lambda hold,next:hold+chr(((ord(next.upper())-65)+13)%26+65),'znlorabggbbhfrshy','')
Απαντήθηκε 29/08/2012 στις 04:34
πηγή χρήστη

ψήφοι
3

Μειώστε δεν περιορίζεται σε βαθμωτό πράξεις? μπορεί επίσης να χρησιμοποιηθεί για να τακτοποιήσει τα πράγματα σε κάδους. (Αυτό είναι ό, τι μπορώ να χρησιμοποιήσω τη μείωση για τις περισσότερες φορές).

Φανταστείτε μια υπόθεση στην οποία έχετε μια λίστα των αντικειμένων, και θέλετε να το αναδιοργανώσει ιεραρχικά με βάση τις ιδιότητες που αποθηκεύονται κατηγορηματικά στο αντικείμενο. Στο παρακάτω παράδειγμα, θα παράγει έναν κατάλογο των αντικειμένων μεταδεδομένων που σχετίζονται με αντικείμενα σε ένα XML με κωδικοποίηση εφημερίδα με τη articlesλειτουργία. articlesδημιουργεί μια λίστα των στοιχείων XML, και στη συνέχεια χάρτες μέσα από αυτά ένα προς ένα, παράγει αντικείμενα που κρατούν κάποιες ενδιαφέρουσες πληροφορίες σχετικά με αυτές. Στο εμπρόσθιο άκρο, Πάω να θέλουν να επιτρέπουν στο χρήστη να περιηγηθείτε στα άρθρα με την ενότητα / υποενότητα / τίτλο. Έτσι μπορώ να χρησιμοποιήσω reduceγια να πάρει τη λίστα των αντικειμένων και να επιστρέψει ένα μοναδικό λεξικό που αντανακλά την / το εδάφιο ιεραρχία τμήμα / είδος.

from lxml import etree
from Reader import Reader

class IssueReader(Reader):
    def articles(self):
        arts = self.q('//div3')  # inherited ... runs an xpath query against the issue
        subsection = etree.XPath('./ancestor::div2/@type')
        section = etree.XPath('./ancestor::div1/@type')
        header_text = etree.XPath('./head//text()')
        return map(lambda art: {
            'text_id': self.id,
            'path': self.getpath(art)[0],
            'subsection': (subsection(art)[0] or '[none]'),
            'section': (section(art)[0] or '[none]'),
            'headline': (''.join(header_text(art)) or '[none]')
        }, arts)

    def by_section(self):
        arts = self.articles()

        def extract(acc, art):  # acc for accumulator
            section = acc.get(art['section'], False)
            if section:
                subsection = acc.get(art['subsection'], False)
                if subsection:
                    subsection.append(art)
                else:
                    section[art['subsection']] = [art]
            else:
                acc[art['section']] = {art['subsection']: [art]}
            return acc

        return reduce(extract, arts, {})

Δίνω δύο λειτουργίες εδώ γιατί πιστεύω ότι δείχνει πως χάρτη και να μειώσει μπορούν να συμπληρώσουν ο ένας τον άλλον πολύ καλά, όταν πρόκειται για αντικείμενα. Το ίδιο πράγμα θα μπορούσε να είχε επιτευχθεί με ένα βρόχο for, ... αλλά ξοδεύουν κάποιο σοβαρό χρόνο με μια λειτουργική γλώσσα έχει την τάση να με κάνει να σκέφτονται με όρους του χάρτη και να μειώσει.

Με την ευκαιρία, αν κάποιος έχει ένα καλύτερο τρόπο για να ρυθμίσετε τις ιδιότητες, όπως κάνω σε extract, όπου οι γονείς του ακινήτου που θέλετε να ορίσετε να μην υπάρχει ακόμα, παρακαλώ επιτρέψτε μου να ξέρω.

Απαντήθηκε 07/09/2012 στις 01:23
πηγή χρήστη

ψήφοι
1

μείωση μπορεί να χρησιμοποιηθεί για να πάρει τη λίστα με τη μέγιστη νιοστή στοιχείο

reduce(lambda x,y: x if x[2] > y[2] else y,[[1,2,3,4],[5,2,5,7],[1,6,0,2]])

θα επέστρεφε [5, 2, 5, 7], όπως είναι ο κατάλογος με max 3ο στοιχείο +

Απαντήθηκε 21/03/2013 στις 05:06
πηγή χρήστη

ψήφοι
4

Σύνθεση Λειτουργία : Αν έχετε ήδη μια λίστα με τις λειτουργίες που θέλετε να εφαρμόσετε διαδοχικά, όπως:

color = lambda x: x.replace('brown', 'blue')
speed = lambda x: x.replace('quick', 'slow')
work = lambda x: x.replace('lazy', 'industrious')
fs = [str.lower, color, speed, work, str.title]

Στη συνέχεια, μπορείτε να τα εφαρμόσετε διαδοχικά με:

>>> call = lambda s, func: func(s)
>>> s = "The Quick Brown Fox Jumps Over the Lazy Dog"
>>> reduce(call, fs, s)
'The Slow Blue Fox Jumps Over The Industrious Dog'

Σε αυτήν την περίπτωση, η μέθοδος αλύσωσης μπορεί να είναι πιο ευανάγνωστο. Αλλά μερικές φορές δεν είναι δυνατό, και αυτό το είδος της σύνθεσης μπορεί να είναι πιο ευανάγνωστο και διατηρήσιμη από ένα f1(f2(f3(f4(x))))είδος σύνταξης.

Απαντήθηκε 15/01/2014 στις 15:55
πηγή χρήστη

ψήφοι
0

Χρησιμοποιώντας τη μείωση () για να διαπιστώσετε εάν μια λίστα των ημερομηνιών είναι διαδοχικές:

from datetime import date, timedelta


def checked(d1, d2):
    """
    We assume the date list is sorted.
    If d2 & d1 are different by 1, everything up to d2 is consecutive, so d2
    can advance to the next reduction.
    If d2 & d1 are not different by 1, returning d1 - 1 for the next reduction
    will guarantee the result produced by reduce() to be something other than
    the last date in the sorted date list.

    Definition 1: 1/1/14, 1/2/14, 1/2/14, 1/3/14 is consider consecutive
    Definition 2: 1/1/14, 1/2/14, 1/2/14, 1/3/14 is consider not consecutive

    """
    #if (d2 - d1).days == 1 or (d2 - d1).days == 0:  # for Definition 1
    if (d2 - d1).days == 1:                          # for Definition 2
        return d2
    else:
        return d1 + timedelta(days=-1)

# datelist = [date(2014, 1, 1), date(2014, 1, 3),
#             date(2013, 12, 31), date(2013, 12, 30)]

# datelist = [date(2014, 2, 19), date(2014, 2, 19), date(2014, 2, 20),
#             date(2014, 2, 21), date(2014, 2, 22)]

datelist = [date(2014, 2, 19), date(2014, 2, 21),
            date(2014, 2, 22), date(2014, 2, 20)]

datelist.sort()

if datelist[-1] == reduce(checked, datelist):
    print "dates are consecutive"
else:
    print "dates are not consecutive"
Απαντήθηκε 22/02/2014 στις 13:16
πηγή χρήστη

ψήφοι
1

Ας πούμε ότι υπάρχουν κάποιες ετήσια στατιστικά στοιχεία αποθηκεύονται μια λίστα Μετρητές. Θέλουμε να βρούμε τις τιμές MIN / MAX για κάθε μήνα στις διάφορες χρόνια. Για παράδειγμα, για τον Ιανουάριο θα ήταν 10. Και για το μήνα Φεβρουάριο θα είναι 15. Πρέπει να αποθηκεύσετε τα αποτελέσματα σε ένα νέο μετρητή.

from collections import Counter

stat2011 = Counter({"January": 12, "February": 20, "March": 50, "April": 70, "May": 15,
           "June": 35, "July": 30, "August": 15, "September": 20, "October": 60,
           "November": 13, "December": 50})

stat2012 = Counter({"January": 36, "February": 15, "March": 50, "April": 10, "May": 90,
           "June": 25, "July": 35, "August": 15, "September": 20, "October": 30,
           "November": 10, "December": 25})

stat2013 = Counter({"January": 10, "February": 60, "March": 90, "April": 10, "May": 80,
           "June": 50, "July": 30, "August": 15, "September": 20, "October": 75,
           "November": 60, "December": 15})

stat_list = [stat2011, stat2012, stat2013]

print reduce(lambda x, y: x & y, stat_list)     # MIN
print reduce(lambda x, y: x | y, stat_list)     # MAX
Απαντήθηκε 22/02/2014 στις 13:18
πηγή χρήστη

ψήφοι
2
import os

files = [
    # full filenames
    "var/log/apache/errors.log",
    "home/kane/images/avatars/crusader.png",
    "home/jane/documents/diary.txt",
    "home/kane/images/selfie.jpg",
    "var/log/abc.txt",
    "home/kane/.vimrc",
    "home/kane/images/avatars/paladin.png",
]

# unfolding of plain filiname list to file-tree
fs_tree = ({}, # dict of folders
           []) # list of files
for full_name in files:
    path, fn = os.path.split(full_name)
    reduce(
        # this fucction walks deep into path
        # and creates placeholders for subfolders
        lambda d, k: d[0].setdefault(k,         # walk deep
                                     ({}, [])), # or create subfolder storage
        path.split(os.path.sep),
        fs_tree
    )[1].append(fn)

print fs_tree
#({'home': (
#    {'jane': (
#        {'documents': (
#           {},
#           ['diary.txt']
#        )},
#        []
#    ),
#    'kane': (
#       {'images': (
#          {'avatars': (
#             {},
#             ['crusader.png',
#             'paladin.png']
#          )},
#          ['selfie.jpg']
#       )},
#       ['.vimrc']
#    )},
#    []
#  ),
#  'var': (
#     {'log': (
#         {'apache': (
#            {},
#            ['errors.log']
#         )},
#         ['abc.txt']
#     )},
#     [])
#},
#[])
Απαντήθηκε 20/05/2014 στις 15:08
πηγή χρήστη

ψήφοι
1

Έχω αντικείμενα που αντιπροσωπεύουν κάποιο είδος επικαλυπτόμενα διαστήματα (γονιδιωματική εξώνια), και επαναπροσδιόρισε διασταύρωση τους με τη χρήση __and__:

class Exon:
    def __init__(self):
        ...
    def __and__(self,other):
        ...
        length = self.length + other.length  # (e.g.)
        return self.__class__(...length,...)

Στη συνέχεια, όταν έχω μια συλλογή από αυτούς (για παράδειγμα, στο ίδιο γονίδιο), χρησιμοποιώ

intersection = reduce(lambda x,y: x&y, exons)
Απαντήθηκε 05/06/2014 στις 12:40
πηγή χρήστη

ψήφοι
4

reduce μπορεί να χρησιμοποιηθεί για την υποστήριξη αλυσοδεμένος αναζητήσεις χαρακτηριστικό:

reduce(getattr, ('request', 'user', 'email'), self)

Φυσικά, αυτό είναι ισοδύναμο με

self.request.user.email

αλλά είναι χρήσιμο όταν ο κώδικας σας θα πρέπει να αποδεχθεί μια αυθαίρετη λίστα χαρακτηριστικών.

(Αλυσίδες χαρακτηριστικά του αυθαίρετου μήκους είναι κοινά, όταν πρόκειται για τα μοντέλα Django.)

Απαντήθηκε 20/06/2014 στις 06:07
πηγή χρήστη

ψήφοι
3

reduceείναι χρήσιμο όταν πρέπει να βρει την ένωση ή την τομή μιας ακολουθίας set-όπως αντικείμενα.

>>> reduce(operator.or_, ({1}, {1, 2}, {1, 3}))  # union
{1, 2, 3}
>>> reduce(operator.and_, ({1}, {1, 2}, {1, 3}))  # intersection
{1}

(Εκτός από την πραγματική sets, ένα παράδειγμα από αυτά είναι Q αντικείμενα Django του .)

Από την άλλη πλευρά, αν έχουμε να κάνουμε με bools, θα πρέπει να χρησιμοποιήσετε anyκαι all:

>>> any((True, False, True))
True
Απαντήθηκε 20/06/2014 στις 06:37
πηγή χρήστη

ψήφοι
2
def dump(fname,iterable):
  with open(fname,'w') as f:
    reduce(lambda x, y: f.write(unicode(y,'utf-8')), iterable)
Απαντήθηκε 16/09/2015 στις 13:43
πηγή χρήστη

ψήφοι
1

Βρήκα μόνο χρήσιμο χρήση reduce: εγχόρδων διάσπαση χωρίς να αφαιρέσετε το διαχωριστικό . Ο κωδικός είναι εξ 'ολοκλήρου από κάποιου προγράμματος Μιλώντας blog. Εδώ είναι ο κώδικας:

reduce(lambda acc, elem: acc[:-1] + [acc[-1] + elem] if elem == "\n" else acc + [elem], re.split("(\n)", "a\nb\nc\n"), [])

Εδώ είναι το αποτέλεσμα:

['a\n', 'b\n', 'c\n', '']

Σημειώστε ότι χειρίζεται υποθέσεις άκρη ότι η λαϊκή απάντηση στην ΑΑ δεν το κάνει. Για περισσότερες σε βάθος εξήγηση, εγώ θα ανακατεύθυνση στην αρχική του θέση blog.

Απαντήθηκε 24/11/2015 στις 11:31
πηγή χρήστη

ψήφοι
2

Θα χρησιμοποιηθεί reduce για να ενώσετε μια λίστα PostgreSQL φορέων αναζήτηση με το ||χειριστή στην sqlalchemy δυνατότητα αναζήτησης:

vectors = (self.column_vector(getattr(self.table.c, column_name))
           for column_name in self.indexed_columns)
concatenated = reduce(lambda x, y: x.op('||')(y), vectors)
compiled = concatenated.compile(self.conn)
Απαντήθηκε 06/01/2016 στις 02:10
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more