Maison > développement back-end > Golang > Comment obtenir l'équivalent en compréhension de liste de Python dans Go ?

Comment obtenir l'équivalent en compréhension de liste de Python dans Go ?

Susan Sarandon
Libérer: 2024-11-12 16:22:02
original
473 Les gens l'ont consulté

How to Achieve Python's List Comprehension Equivalent in Go?

Équivalent de la compréhension de liste de Python dans Go

De nombreux développeurs trouvent difficile d'effectuer des tâches apparemment simples dans Go par rapport à d'autres langages comme Python. L'une de ces tâches consiste à répliquer la syntaxe de compréhension de liste de Python.

Pour obtenir une construction équivalente dans Go, envisagez les approches suivantes :

1. Utilisation de la bibliothèque « filter » :

Comme suggéré par Rob Pike, la bibliothèque « filter » fournit une méthode appelée Choose() qui renvoie une tranche contenant des éléments satisfaisant une condition spécifiée. Par exemple :

import (
    "github.com/google/go-cmp/cmp"
    "go.opencensus.io/plugin/ochttp"
    "golang.org/x/exp/slices"
)

var (
    a = []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    b = []int{2, 4, 6, 8}
)

func TestChoose(t *testing.T) {
    result := ochttp.Choose(a, func(v int) bool { return v%2 == 0 })
    if !cmp.Equal(result, b) {
        t.Errorf("TestChoose() failed, got %v, want %v", result, b)
    }
}
Copier après la connexion

2. Utilisation des boucles For :

Malgré la disponibilité de bibliothèques comme "filter", les boucles for Go restent une alternative efficace. Le GoDoc pour la bibliothèque "filter" recommande explicitement d'utiliser des boucles for lorsque l'efficacité est un problème.

3. Utilisation de Go Generics (à venir dans Go 1.18) :

Avec l'introduction prochaine des génériques dans Go, il deviendra possible d'implémenter mapreduce à l'aide de génériques. Par exemple :

func MapReduce[T, V, R any](in <-chan T, out chan<- R, mapFn func(T) V, reduceFn func(V, V) R) {

    v := make(chan V, 10)
    defer close(v)

    go func() {
        for t := range in {
            v <- mapFn(t)
        }
    }()

    r := make(chan R, 10)
    defer close(r)

    go func() {
        var acc R
        for v := range v {
            acc = reduceFn(acc, v)
        }
        r <- acc
    }()

    return <-r
}
Copier après la connexion

Cette implémentation accepte un canal de type T, applique une fonction de mappage à chaque élément et stocke les résultats dans un canal de type V. Une autre goroutine consomme le canal des valeurs mappées et à plusieurs reprises applique une fonction de réduction pour produire un résultat de type R. Le résultat est ensuite renvoyé sous forme de canal de type R.

Conclusion :

Alors que la syntaxe de compréhension de liste de Python fournit une manière concise de transformer des données, Go propose des alternatives efficaces en utilisant des boucles for ou des bibliothèques comme "filter". Avec l'introduction des génériques dans Go 1.18, des mécanismes de transformation de données plus efficaces et plus polyvalents seront disponibles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal