web-dev-qa-db-fra.com

Python: comment joindre des entrées d'un ensemble en une seule chaîne?

Fondamentalement, j'essaie de réunir les entrées d'un ensemble afin de générer une chaîne. J'essaie d'utiliser une syntaxe similaire à la fonction de jointure pour les listes. Voici ma tentative:

list = ["gathi-109","itcg-0932","mx1-35316"]
set_1 = set(list)
set_2 = set(["mx1-35316"])
set_3 = set_1 - set_2
print set_3.join(", ")

Cependant, j'obtiens cette erreur: AttributeError: 'set' object has no attribute 'join'

Quel est l'appel équivalent pour les sets? 

53
Spencer
', '.join(set_3)

join est une méthode de chaîne, pas une méthode de jeu.

117
Jmjmh

Les ensembles n'ont pas de méthode join mais vous pouvez utiliser str.join à la place.

', '.join(set_3)

La méthode str.join fonctionnera sur tout objet itérable, y compris les listes et les ensembles.

Remarque: soyez prudent lorsque vous utilisez ceci sur des ensembles contenant des entiers. vous devrez convertir les entiers en chaînes avant l'appel à rejoindre. Par exemple

set_4 = {1, 2}
', '.join(str(s) for s in set_4)
26
Jack Edmonds

La join est appelée sur la chaîne:

print ", ".join(set_3)
5
MByD

Les ensembles n’ont pas d’ordre - de sorte que vous pouvez perdre votre ordre lorsque vous convertissez votre liste en un ensemble, c’est-à-dire:

>>> orderedVars = ['0', '1', '2', '3']
>>> setVars = set(orderedVars)
>>> print setVars
('4', '2', '3', '1')

En règle générale, la commande reste, mais pour les grands ensembles, elle ne le fera presque certainement pas.

Enfin, juste au cas où les gens se demandent, vous n'avez pas besoin d'un ',' dans la jointure.

Juste: '' .join (set)

:)

4
John

Ni la set ni la list n'a une telle méthode join, string l'a:

','.join(set(['a','b','c']))

En passant, vous ne devriez pas utiliser name list pour vos variables. Donnez-lui un list_, my_list ou un autre nom car list est une fonction python très souvent utilisée.

4
Ski

Je pense que vous avez juste à l'envers.

print ", ".join(set_3)
3
recursive

Vous avez la déclaration de jointure à l'envers essayez:

print ', '.join(set_3)
3
Hunter

J'ai écrit une méthode qui gère les cas Edge suivants:

  • Définir la taille un. Un ", ".join({'abc'}) retournera "a, b, c". Ma sortie désirée était "abc".
  • Définir y compris les entiers.
  • L'ensemble vide devrait retourner ""
def set_to_str(set_to_convert, separator=", "):
        set_size = len(set_to_convert)
        if not set_size:
            return ""
        Elif set_size == 1:
            (element,) = set_to_convert
            return str(element)
        else:
            return separator.join(map(str, set_to_convert))
0