J'essaie de trouver un moyen de savoir si une variable se compose d'un élément ou de plusieurs éléments. Je sais que cela semble plutôt vague, mais j'espère que ce qui suit éclairera la lumière.

J'ai essayé quelques choses, au début, je pensais que l'élément ressemblait à une chaîne ou à une liste, mais l'utilisation de if isinstance(variable, basestring) produit un True sur chaque valeur. J'ai essayé de vérifier la longueur en utilisant len() mais bien sûr, comme ce sont des chaînes, j'obtiens toujours un compte de chaque caractère de la chaîne. J'ai également essayé if isinstance(variable, list) mais bien sûr, il y avait toujours un False.

J'essaie d'imprimer chaque élément seul, ci-dessous se trouve du code sudo et des données de test.

variable = ["[u'cheese']", "[u'grapes', u'oranges']", "[u'apple']"]

for item in variable:
    if isinstance(item, list):
        for i in item:
            print i
    else:
        print item

Bien sûr, comme mentionné, ce code ne fonctionne pas et je ne sais pas comment y remédier. Toute aide serait appréciée.

-1
iNoob 5 mars 2016 à 19:01

4 réponses

Meilleure réponse

Si, pour une raison quelconque, vous avez vraiment besoin de traiter des chaînes de cette manière, vous pouvez utiliser { {X0}} pour obtenir de vraies listes à partir de vos chaînes:

import ast

for item in ["[u'cheese']", "[u'grapes', u'oranges']", "[u'apple']"]:
    for food in ast.literal_eval(item):
        print(food)
3
Chris 5 mars 2016 à 16:26

Utilisez des listes réelles au lieu de chaînes. Ensuite, il devrait être facile de parcourir les éléments.

variable = [[u'cheese'], [u'grapes', u'oranges'], [u'apple']]

for item in variable:
    for x in item:
        print x

Production:

cheese
grapes
oranges
apple
1
pp_ 5 mars 2016 à 16:18
>>> variable = ["[u'cheese']", "[u'grapes', u'oranges']", "[u'apple']"]
>>> for i in variable:
...     for j in i.lstrip('[').rstrip(']').split(','):
...         print j.lstrip(" ").lstrip("u'").rstrip("'") 
... 
cheese
grapes
oranges
apple
>>> 
0
caot 5 mars 2016 à 16:28

Votre variable semble être une liste de string:

variable = ["['cheese']", "[u'grapes', u'oranges']", "[u'apple']"]

Mais dans ce string, vous pouvez avoir plusieurs éléments. Ainsi, vous devrez peut-être effectuer une analyse de chaîne. Pour votre cas simple, si vous voulez seulement compter le nombre d'éléments par liste, le plus simple est de compter le nombre de virgules + 1. Je recommande donc d'utiliser le simple string.split(',') pour imprimer les éléments un par un:

variable = ["['cheese']", "[u'grapes', u'oranges']", "[u'apple']"]
for var in variable:
    words = var.split(',')
    for w in words:
        printedword = w.replace('u\'','').replace('\'','').replace(']','').replace('[','').strip()
        print(printedword)

Résultat:

cheese
grapes
oranges
apple

Il aurait été beaucoup plus facile de travailler avec si votre variable est une liste de listes. Consultez la réponse pp_ pour cela.

1
Community 23 mai 2017 à 12:07