J'essaye de redresser un programme qui prend une liste imbriquée, et renvoie une nouvelle liste qui enlève les noms propres.se débarrasser des noms propres dans une liste imbriquée python
Voici un exemple:
L = [['The', 'name', 'is', 'James'], ['Where', 'is', 'the', 'treasure'], ['Bond', 'cackled', 'insanely']]
Je veux revenir:
['the', 'name', 'is', 'is', 'the', 'tresure', 'cackled', 'insanely']
Prenez note que 'où' est supprimé. C'est ok car il n'apparaît nulle part ailleurs dans la liste imbriquée. Chaque liste imbriquée est une phrase. Mon approche est d'ajouter chaque premier élément de la liste imbriquée à une newList. Ensuite, je compare pour voir si les éléments de la liste newList sont dans la liste imbriquée. Je mettrais en minuscules l'élément dans la newList pour vérifier. Je suis à moitié fait avec ce programme, mais je cours une erreur quand j'essaye de retirer l'élément de newList à la fin. Une fois la nouvelle liste mise à jour, je souhaite supprimer les éléments de la liste imbriquée qui se trouvent dans la liste newList. J'ajouterais enfin tous les éléments de la liste imbriquée à une nouvelle liste et aux minuscules. Ça devrait le faire.
Si quelqu'un a une approche plus efficace, je serais ravi d'écouter.
def lowerCaseFirst(L):
newList = []
for nestedList in L:
newList.append(nestedList[0])
print newList
for firstWord in newList:
sum = 0
firstWord = firstWord.lower()
for nestedList in L:
for word in nestedList[1:]:
if firstWord == word:
print "yes"
sum = sum + 1
print newList
if sum >= 1:
firstWord = firstWord.upper()
newList.remove(firstWord)
return newList
Notez ce code n'est pas terminé en raison de l'erreur dans la seconde à la dernière ligne
est ici avec le newerList (updatedNewList):
def lowerCaseFirst(L):
newList = []
for nestedList in L:
newList.append(nestedList[0])
print newList
updatedNewList = newList
for firstWord in newList:
sum = 0
firstWord = firstWord.lower()
for nestedList in L:
for word in nestedList[1:]:
if firstWord == word:
print "yes"
sum = sum + 1
print newList
if sum >= 1:
firstWord = firstWord.upper()
updatedNewList.remove(firstWord)
return updatedNewList
message d'erreur:
Traceback (most recent call last):
File "/Applications/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 1, in <module>
# Used internally for debug sandbox under external interpreter
File "/Applications/WingIDE.app/Contents/MacOS/src/debug/tserver/_sandbox.py", line 80, in lowerCaseFirst
ValueError: list.remove(x): x not in list
Vous ne mentionnez pas l'erreur, mais vous ne pouvez pas modifier une liste en la parcourant.Pourquoi ne pas ajouter les éléments que vous voulez à une nouvelle liste, plutôt que d'essayer de supprimer ceux que vous ne voulez pas de l'ancien? Si vous voulez des commentaires plus généraux, essayez http://codereview.stackexchange.com – jonrsharpe
Est le premier "The" minuscule? – MxyL