Как удалить пробелы в списке строк в 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', ' '] и так далее.



Вы можете помочь мне решить эту проблему?

3814   6  

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

    Ничего не найдено.