python - удалить строку из слов в массиве - PullRequest
0 голосов
/ 15 января 2011
#!/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

как мне заставить программу удалить строку "in" из всех слов, с которых она начинается?сейчас это не работает

Ответы [ 4 ]

2 голосов
/ 15 января 2011
#!/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. использование 'with' гарантирует, что файл всегда правильно закрыт;
  2. Я делаю все слова набором; это делает его поиск операцией O (1)

тогда мы можем сделать

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

или запустите его в одном выражении, например

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

Выполнение второго способа также позволяет нам использовать генератор для внутреннего цикла, уменьшая требования к памяти.

1 голос
/ 15 января 2011

split() возвращает список сегментов, полученных путем разбиения.Кроме того,

word = word.split('in')

не изменяет ваш список, он просто изменяет итерируемую переменную.

Попробуйте заменить второй цикл следующим образом:

for i in range(len(newlist)):
    word = newlist[i].split('in', 1)
    newlist[i] = word[1]
1 голос
/ 15 января 2011

Трудно сказать по вашему вопросу, что вы хотите в newlist, если вы просто хотите, чтобы слова, начинающиеся с "in", но с "in", были удалены, тогда вы можете использовать slice :

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

Если вы хотите, чтобы слова, начинающиеся с "in", все еще были в wordlist после того, как они были удалены "in" (это то, что вы имели в виду под "реальным" в своем комментарии?), Тогда вам нужно что-тонемного по-другому:

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

Обратите внимание, что в Python мы используем list, а не "массив".

0 голосов
/ 15 января 2011

Предположим, что wordlist - это список слов.Следующий код должен помочь:

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

Лучше использовать цикл while, если количество слов в списке довольно большое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...