#python
#python
Вопрос:
У меня возникла проблема при попытке подсчитать пробелы в списке на python.
Вот мой код
Data = ''
index = 0
num_words = 0
# Open a file for reading.
infile = open('article.txt', 'r')
# Read the contents of the file into a list.
data = infile.readlines()
# Strip the n from each element.
while index < len(data):
data[index] = data[index].rstrip('n')
index = 1
for ch in data:
if ch.isspace():
num_words = 1
# Close the file.
infile.close()
# Print the contents of the list.
print(num_words)
Содержимое article.txt это просто список предложений, поэтому список — это просто список строк, таких как:
data = ['this is sentence one.', 'this is sentence two.' , 'this is sentence three.' , 'this is sentence four.' , 'this is sentence five.' , 'this is sentence six.' ]
Я думаю, что знаю, в чем проблема, потому что я сделал:
print(ch)
В результате ‘false’ печатается 6 раз. Я думаю, это потому, что цикл for выполняет поиск, чтобы увидеть, является ли вся строка пробелом, а не проверяет наличие пробелов внутри строки.
Я знаю, что мог бы просто сделать:
data = infile.read()
Но мне нужна каждая строка в списке. Могу ли я что-нибудь изменить, чтобы цикл for выполнял поиск пробелов в каждой строке списка, или мне не повезло?
Комментарии:
1. Вы правы относительно причины вашей проблемы. Вам нужны два вложенных цикла for. Внешний проходит через элементы списка (строки), внутренний — через каждый символ одного элемента списка.
2. почему бы просто не
"some data in a line".count(" ")
? Или вам нужны и другие пробелы?3. Я смог решить эту проблему, следуя рекомендации Майклза о создании внутреннего цикла for. Спасибо!
4. OP: Вы считаете слова, а не пробелы, не так ли?
Ответ №1:
В Python есть удобный метод для работы со строками, называемый str.split
. При отсутствии переданных аргументов он будет разделен на пробелы. Если вы посчитаете элементы в результирующем списке, у вас будет количество слов.
Обрабатывает несколько пробелов:
>>> line = "this is some string."
>>> len(line.split())
4
Обрабатывает пустые строки:
>>> line = " "
>>> len(line.split())
0
Обрабатывает дополнительное пространство до и после:
>>> line = " space before and after. "
>>> len(line.split())
4
Вот несколько примеров кода:
lines = 0
words = 0
with open('yourfile', 'rt') as yourfile:
for line in yourfile:
lines = 1
words = len(line.split())
Комментарии:
1. Спасибо! Это выглядит намного лучше, чем мое решение.