Réglage d'impression() de l'élément de remplissage avec python générateur
J'ai un générateur:
foundUnique = set()
def unique_items(myList, index, clearFlag):
for item in myList:
if clearFlag is True:
foundUnique.clear()
clearFlag = False
if item[index] not in foundUnique:
yield item
foundUnique.add(item[index])
Et je suis en utilisant ce " unique_items pour obtenir une liste unique:
senderDupSend = unique_items(ip, 4, True)
Maintenant, je veux mon jeu pour être accessible (je peux imprimer son élément ou faire quelques modifications sur l'élément spécifique .....) mais quand j'écris:
for item in foundUnique:
print item
Il imprime rien!
Mais si j'écris:
for item in senderDupSend:
print item
for item in foundUnique:
print item
Il imprime toutes les foundUnique éléments.
S'il vous plaît dites qu'ai-je fait de mal? Comment puis-je résoudre ce problème?
- Saint !! python me surprend tout le temps.
Vous devez vous connecter pour publier un commentaire.
Le problème est que
unique_items
est un générateur de sorte queest un générateur qui doit être itéré. Lorsque vous exécutez
le générateur n'a pas fait exécuter pourtant si
foundUnique
est toujours vide.Plus tard lorsque vous aller faire
Il doit imprimer le jeu deux fois: une fois quand il est en cours de construction et la fois d'après il est construit.
Il semble que ce que vous essayez de faire est de construire un ensemble qui a le même indice de prises de chaque élément d'une séquence. Vous pouvez le faire comme ceci très facilement:
Dans le cas concret que vous montrez, il serait:
Si plus tard vous avez voulu étendre l'ensemble de contenir d'autres éléments, vous pouvez faire
set
constructeur que j'ai illustré. Pour la seconde, un générateur fonctionnera uniquement sur ses valeurs une fois. Dans ce cas, vous avez le générateur de laisser les valeurs dansfoundUnique
de sorte qu'ils seront disponibles après (mais pas avant) le générateur fonctionne.