Как удалить пробелы в списке строк в python?
Я просматривал форумы и вопросы, заданные на сайте по моему вопросу, и ни один из них, кажется, не работает!
Я делал программу python 3 в школе, где я хочу удалить пробелы из списка чисел от 1 до 1000. Я сделал текстовый документ из чисел и импортировал их в список, но когда они помещаются в список, они включают пробелы, которые я не могу иметь.
Я перепробовал все методы, и они, кажется, разделяют каждое число но они не остаются вместе в своем первоначальном количестве.
number = []
f = open('test.txt', 'r')
file_contents = f.read()
List = file_contents
f.close()
for i in List:
number.append(i)
for i in number:
if i == '':
number.remove(' ')
print(number)
Вот что дает мне результат.:
['0', ' ', '1', ' ', '2', ' ', '3', ' ', '4', ' ', '5', ' ', '6', ' ', '7', ' '] и так далее.
Вы можете помочь мне решить эту проблему?
6 ответов:
Похоже, что вы только что сделали опечатку в коде: вы проверяете, является ли элемент пустой строкой
'', где вы на самом деле хотели проверить, является ли это пробел' '.Однако удаление элементов из списка при повторении этого же списка не является хорошей практикой и может привести к некоторым неожиданным результатам. Кажется, это работает в данном случае, но даже не входит в привычку. Вместо этого используйте понимание списка, чтобы отфильтровать нежелательные элементы.for i in number: if i == ' ': # ' ' instead of '' number.remove(' ')number = [n for n in number if n != ' ']Если вы тоже хотите чтобы преобразовать числовые строки в действительные числа, используйте следующее:
number = [int(n) for n in number if n != ' ']
Однако, похоже, есть еще одна проблема с тем, как Вы читаете файл. Вы читаете все содержимое файла в одну строку, которая, как я могу только предположить, выглядит следующим образом:"1 2 3 4 ... 11 12 13 ... 451 452 ...". Затем вы преобразуете каждый символ из этой строки в число, то есть вместо451, 452вы получаете'4', '5', '1', ' ', '4', '5', '2'. Вместо того, чтобы перебирать каждый символ,splitстрока сначалаList = file_contents.split() # added .split()Таким образом, вы не будете даже нужно удалить пробелы после этого, так как они уже удалены с
split.Вы можете сделать все это в одной (ну, в двух) строках, используя
withи один список понимания:with open('test.txt', 'r') as f: number = [int(n) for n in f.read().split()]
Вы можете сделать так
number = [] f = open('test.txt', 'r') file_contents = f.read() f.close() for i in file_contents: if i.strip(): number.append(i) print(number)
Прежде всего было бы интересно узнать, как работает этот список.текстовый документ выглядит именно так. Имейте в виду правильные окончания строк.
Чтобы избавиться от пробелов, вы можете пойти разными путями. Я думаю, что я бы пошел с чем-то вроде этого:
[ x.strip() for x in data.readlines() if x.strip().isdigit() ]Который является пониманием списка, который возвращает список
Вы можете сделать это:
list = ['0', ' ', '1', ' ', '2', ' ', '3', ' ', '4', ' ', '5', ' ', '6', ' ', '7', ' '] list = filter(lambda x:x != ' ', list) for i in list: number.append(i) print(number)Я получил такой результат :['0', '1', '2', '3', '4', '5', '6', '7']
Может исправить это с помощью замены строк с 11 по 13 кодом, как показано ниже:
number = [i for i in number if i != ' '] # To exclude empty space from array # Or number = [i.strip() for i in number if i.strip()] # To remove space of each element
Вы можете использовать функцию фильтра или рекурсию:
def removal(yourlist): if yourlist[0]==[' ']: return removal(yourlist[1:]) if yourlist[0]!=[' ']: return yourlist[0]+removal(yourlist[1:])
Comments