2016-03-24 2 views
0

Итак, для второй части моего проекта python мы должны идентифицировать отдельные слова в предложении, сохранить их в списке и заменить каждое слово на позицию слова в списке. Вот то, что я до сих пор:Замена строк в списке с номером

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

Выглядит хорошо. Каков ваш ожидаемый результат? –

+0

Как вы думаете, какой результат должен быть для вашего примера? – quamrana

+0

Итак, вместо вывода [I, AM, HAVING] это будет [0, 1, 2] –

ответ

0

Просто распечатайте диапазон длины split списка. Это даст вам все номера по длине.

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

Это то, что вы хотите?

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

точно. Спасибо! –

+0

Тогда вы можете [принять этот ответ] (http://cdn.sstatic.net/img/faq/faq-accept-answer.png) –

+0

Не работает с повторяющимися словами – Schore

2

Вы можете попробовать:

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

Выход в l является:

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

Я строго рассмотрел факт «заменить каждое слово на позицию». Диапазон() не заменяет, он просто заполняет список от x до y. – Mastodon

+0

Я как-то не думаю, что этот ответ должен был быть проголосован. –

2

Первое решение:

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

Второе решение:

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

С повторением слов вы получите разные результаты, так как 'index' будет только найти первый экземпляр слова. –

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 

выходы:

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

используя 'set()' messed with the ordering –

+0

Является ли заказ важным? – user3748764

+0

В комментариях ... "[I, AM, HAVING] будет [0, 1, 2]" –

0

Если вы не хотите, чтобы создать новый индекс для повторяющихся слов:

>>> 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

Вот один, который более точно соответствует вашей исходной попытки , Это должно работать с дубликатами и также использует исходный массив.

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) 
Смежные вопросы