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.
4 réponses
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)
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
>>> 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
>>>
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.
Questions connexes
Questions liées
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.