2016-03-24 15 views
0

Also für den zweiten Teil meines Python-Projekts müssen wir einzelne Wörter in einem Satz identifizieren, sie in einer Liste speichern und jedes Wort durch die Position des Wortes in der Liste ersetzen. Hier ist, was ich bisher:Ersetzen von Strings in einer Liste durch eine Zahl

s = 'I am having a very nice day.' 
split = s.split() 
print(split) 
len(s.split()) 
+1

Sieht gut aus so weit. Was ist Ihre erwartete Leistung? –

+0

Was denken Sie, sollte die Ausgabe für Ihren Beispielsatz sein? – quamrana

+0

Also statt der Ausgabe [I, AM, HAVING] wäre es [0, 1, 2] –

Antwort

0

Drucken Sie einfach den Bereich der Länge der split Liste. Dadurch erhalten Sie alle Zahlen auf der Länge.

s = 'I am having a very nice day.' 
print(range(len(s.split()))) 
# [0, 1, 2, 3, 4, 5, 6] 
3

Ist das, was Sie wollen?

s = 'I am having a very nice day.' 
words = s.split() 
res = list(range(len(words))) 

print(res) # [0, 1, 2, 3, 4, 5, 6] 
+0

genau. Danke! –

+0

Dann Sie können [diese Antwort akzeptieren] (http://cdn.static.net/img/faq/faq-accept-answer.png) –

+0

funktioniert nicht mit doppelten Wörtern – Schore

2

Sie können mit versuchen:

s = 'I am having a very nice day.' 
sp_s = s.split() 
l = [sp_s.index(x) for x in sp_s] 

Der Ausgang in l ist:

[0, 1, 2, 3, 4, 5, 6] 
+0

Ich habe streng die Tatsache von "jedes Wort mit der Position ersetzen". Ein Bereich() ersetzt nicht, er füllt nur eine Liste von x bis y. – Mastodon

+0

Ich glaube irgendwie nicht, dass diese Antwort hätte abgelehnt werden sollen. –

2

Erste Lösung:

>>> map(lambda x: s.split().index(x), s.split()) 
[0, 1, 2, 3, 4, 5, 6] 

Zweite Lösung:

>>> range(len(s.split())) 
[0, 1, 2, 3, 4, 5, 6] 
+0

Mit wiederholten Wörtern würden Sie unterschiedliche Ergebnisse erhalten, da 'index' nur die erste Instanz des Wortes finden würde. –

0
import re 
s = "I am having a very nice day." 

words = list(set(re.findall(r'\w+', s))) 
print words 

s2 = re.sub(r'\w+', lambda m: str(words.index(m.group(0))), s) 
print s2 

Ausgänge:

['a', 'I', 'am', 'day', 'very', 'having', 'nice'] 
1 2 5 0 4 6 3. 
+0

Verwendung von 'set()' mit der Bestellung vermischt –

+0

Ist die Reihenfolge wichtig? – user3748764

+0

In den Kommentaren ... "[I, AM, HAVING] wäre [0, 1, 2]" –

0

Wenn Sie nicht wollen, einen neuen Index für doppelte Wörter erstellen:

>>> d = dict() 
>>> for word in "the cat in the hat".split(): 
>>>  if word not in d: 
>>>   d[word] = len(d) 
>>> [word[0] for word in sorted(d.iteritems(), key=lambda x: x[1])] 
['the', 'cat', 'in', 'hat'] 
>>>> [d[word] for word in "the cat in the hat".split()] 
[0, 1, 2, 0, 3] 
0

Hier ist eine, die nahe an mehr ursprünglichen Versuch . Dies sollte mit Duplikaten funktionieren und auch das ursprüngliche Array verwenden.

s = 'I am having a very nice day.' 
split = s.split() 
print(split) 
length = len(split) 
index = length - 1 
while (index >= 0): 
    split[index] = index; 
    index = index - 1; 
print(split) 
Verwandte Themen