b = []
def ch_1(x,y):
for i in x:
if y in i:
b.append("web")
else:
b.append("others")
return b
5 Réponses :
Vous devez parcourir les deux listes données comme paramètres.
['web', 'web', 'others']
Sortie
def ch_1(x,y):
b = []
for i in x:
for j in y:
if j in i:
b.append('web')
break
else:
b.append('others')
return b
print(ch_1(data, words))
Je veux une seule catégorie pour chaque phrase, c'est-à-dire que la sortie doit être [web, web, others]
J'ai essayé cela mais la même erreur / confusion. La sortie doit être [web, web, others] car les deux premières phrases contiennent des mots web / online. Peux tu vérifier s'il te plaît
@anant Cela ne devrait pas. Ça marche pour moi. J'ai même essayé data = ["mon portail Web ne fonctionne pas", "en ligne est mieux que hors ligne", "j'aime aller à la pharmacie pour acheter des médicaments", "tester Web", "tester en ligne", "ne rien tester '] il donne [' web ',' web ',' others ',' web ',' web ',' others '] comme sortie.
Merci beaucoup. Ça a marché. En fait, j'ai essayé mais je n'ai pas utilisé de pause. Merci :)
Quel serait le changement de code si j'ai plus d'une liste à vérifier. Par exemple words_2 = ['pomme']. donc si la phrase a «pomme» dans sa catégorie, il y aura des fruits. Il y a donc maintenant trois catégories: Web, Fruits, Autres
@anant Bonjour, vous pouvez publier ceci comme une question distincte. Astuce: créez un dictionnaire avec des clés comme 'web' , 'fruits' et les valeurs correspondantes comme liste. Vous devrez ensuite parcourir ce dictionnaire avec dict_.items () ; si trouvé, ajoutez la clé dans la nouvelle liste, sinon ajoutez 'others' .
ok ce que je comprends que vous dites pour créer un dictionnaire comme dictio = {'fruits': ['apple'], 'web': ['web', 'online']} et parcourir le dictionnaire pour obtenir la catégorie souhaitée. mais pouvez-vous m'aider à comprendre le code pour cela s'il vous plaît
Utilisation de dans l'opérateur pour vérifier la chaîne " contient 'sous-chaîne.
['web', 'web', 'others']
O / P:
data = ["my web portal is not working","online is better than offline", "i like going to pharmacy shop for medicines"]
words = ["web", "online"]
def ch_1(x,y):
b = []
for i in x:
web = False
for j in y:
if j in i:
web = True
break
if web:
b.append("web")
else:
b.append("others")
return b
print(ch_1(data,words))
La sortie doit être [web, web, others]
@anant Avez-vous essayé mon code, la sortie sera la même que vous attendiez
Ce code convient à n'importe quel nombre de mots dans mots et phrases dans data:
{
'i like going to pharmacy shop for medicines': ['others'],
'online is better than offline': ['online'],
'my web portal is not working': ['web']
}
data = [
"my web portal is not working",
"online is better than offline",
"i like going to pharmacy shop for medicines"
]
words = ["web", "online"]
def ch_1(words, data):
categories = {sentence: [] for sentence in data}
for sentence in data:
for word in words:
if word in sentence: # and categories[sentence] == [] ((if you want exactly one category for each sentence))
categories[sentence].append(word)
for sentence in categories:
if categories[sentence] == []:
categories[sentence].append('others')
return categories
print(ch_1(words, data))
Légère différence de sortie nécessaire. Cela devrait être Web, Web, autres
Dans votre déclaration
TypeError: 'in <string>' requires string as left operand, not list
y est une liste. Vous ne montrez pas comment vous avez appelé ch_1, mais je suppose que vous avez utilisé ch_1 (données, mots). Le paramètre y est donc ["web", "online"], et vous essayez de trouver la liste entière dans i, qui est une chaîne. Donc, vous obtenez le message
if y in i:
car il s'attend à ce que y soit une chaîne à trouver dans la chaîne i. Lui fournir une liste n'a pas de sens. Si vous utilisiez y [0] dans i, ou y [1] dans i, alors vous fourniriez correctement une chaîne à rechercher dans i.
Vous avez raison, lorsque je fournissais y [0] dans i, j'obtenais une sortie correcte, mais mon problème est que j'ai une longue liste de mots. Je ne peux pas fournir y [index] plusieurs fois. Toute solution pour ça
Essayez, le cas échéant (a dans i pour a dans y): je vous recommande également d'essayer de trouver des noms de variables significatifs.
Utilisé tout ne fonctionne pas. La solution fournie par @Arkistarvh Kltzuonstev a fonctionné. Merci pour l'aide
Essayez la forme de [expression conditionnelle pour la phrase dans les données] :
data = [
"my web portal is not working",
"online is better than offline",
"i like going to pharmacy shop for medicines",
]
words = ["web", "online"]
["web" if any(word in sentence for word in words) else "others" for sentence in data]
Prenez une liste de phrases. Faites une liste de mots "web" ou "autre" par phrase selon qu'ils contiennent l'un des mots d'une autre liste.