2011-01-15 7 views
0
 
#!/usr/bin/python 
#this looks for words in dictionary that begin with 'in' and the suffix is a real word 
wordlist = [line.strip() for line in open('/usr/share/dict/words')] 
newlist = [] 
for word in wordlist: 
    if word.startswith("in"): 
     newlist.append(word) 
for word in newlist: 
    word = word.split('in') 
print newlist 

Wie bekomme ich das Programm, um die Zeichenfolge "in" von allen Wörtern zu entfernen, mit denen es beginnt? gerade jetzt funktioniert es nichtpython - String aus Wörtern in einem Array entfernen

+0

Wenn Sie nur nach Wörtern suchen, deren Gegensätze mit "in" vorangestellt sind, beachten Sie, dass nicht alle Wörter, die mit "in" beginnen, gegensätzlich zu anderen Wörtern sind. Zum Beispiel: "Darm", "injizieren", usw. – BoltClock

+0

@BoltClock: Nun, in diesen Fällen hilft es, dass "testine" und "ject" keine Wörter sind (vorausgesetzt, er fügt einen Test dafür hinzu). "Untersuchung" wäre jedoch ein Problem. –

+0

@David Deutsch: Genau. – BoltClock

Antwort

1

split() gibt eine Liste der durch Teilung erhaltenen Segmente zurück. Darüber hinaus

word = word.split('in') 

ändert nicht Ihre Liste, es ändert nur die Variable iteriert werden.

Versuchen Sie, Ihre zweite Schleife mit dieser ersetzen:

for i in range(len(newlist)): 
    word = newlist[i].split('in', 1) 
    newlist[i] = word[1] 
+0

danke - das hat MARVELOUSly funktioniert – tekknolagi

+0

Dies wird Probleme mit Wörtern haben, die die Teilzeichenfolge "in" nicht-Präfix, wie "unendlich" enthalten. –

+1

@David Deutsch: Passing "1" sollte darauf achten. – BoltClock

0

Angenommen, dass wordlist die Liste der Wörter ist. Folgender Code sollte es tun:

for i in range(len(wordlist)): 
    if wordlist[i].startswith("in"): 
     wordlist[i] = wordlist[i][2:] 

Es ist besser while Schleife zu verwenden, wenn die Anzahl der Worte in der Liste ist ziemlich groß.

+0

Muss ich ein Modul importieren? ltrim scheint kein akzeptables Attribut zu sein – tekknolagi

+0

@teknolagi: Ich denke, das soll sein 'lstrip()' – BoltClock

+0

oh das würde einige Dinge lösen .... – tekknolagi

1

Es ist schwierig, aus Ihrer Frage zu sagen, was Sie in newlist wollen, wenn Sie nur Worte wollen, die Sie entfernt mit „in“, sondern mit „in“ beginnt dann können Sie eine slice:

newlist = [word[2:] for word in wordlist if word.startswith('in')] 

Wenn Sie also wollen, die mit „in“ sind noch in wordlist beginnen, sobald sie „in“ entfernt hatte (das ist, was Sie mit dem „real“ in Ihrem Kommentar gemeint?) dann brauchst du etwas anderes Miete:

newlist = [word for word in wordlist if word.startswith('in') and word[2:] in wordlist 

Beachten Sie, dass in Python wir eine list verwenden, nicht ein "Array".

+1

Dies ist eine großartige Antwort. Das zweite Listenverständnis wird jedoch O (N^2) in der Länge der Wortliste sein. Wenn das das Verhalten ist, das Sie wollen, und die Wortliste groß ist, denken Sie an einen Trie: http://en.wikipedia.org/wiki/Trie –

2
#!/usr/bin/env python 

# Look for all words beginning with 'in' 
# such that the rest of the word is also 
# a valid word. 

# load the dictionary: 
with open('/usr/share/dict/word') as inf: 
    allWords = set(word.strip() for word in inf) # one word per line 
  1. mit 'mit' sorgt für die Datei immer richtig geschlossen ist;
  2. Ich mache alle Wörter ein Set; Dies macht es eine O (1) -Operation

dann können wir

# get the remainder of all words beginning with 'in' 
inWords = [word[2:] for word in allWords if word.startswith("in")] 
# filter to get just those which are valid words 
inWords = [word for word in inWords if word in allWords] 

tun suchen oder in einer einzigen Anweisung, wie

inWords = [word for word in (word[2:] for word in allWords if word.startswith("in")) if word in allWords] 

tun es die zweite Art und Weise laufen auch lässt Wir verwenden einen Generator für die interne Schleife, was die Speicheranforderungen reduziert.

+3

Ihre letzte Liste Verständnis Aussage ist eine verdammt Zungenbrecher. – BoltClock

Verwandte Themen