Я хочу удалить определенные символы в списке в Python - PullRequest
0 голосов
/ 14 января 2019

У меня есть список:

[('11 August 1902\xa0(1902-08-11)Paris, France', None), 
 ('29 July 1991(1991-07-29) (aged\xa088)Paris, France', None), 
 ('\xa0France', None), ('\xa0French Army', None), ('1921-1959', None), 
 ('General de brigade', None), 
 ('Mobile Group 2Mobile Group 1Operational Group North-West', None),
 ('World War IIFirst Indochina War*Battle of Dien Bien Phu', None)]

Я хочу удалить None и '\xa0' из списка.

Мой друг сказал, что мне нужно будет преобразовать его в строку, чтобы удалить текст и преобразовать его обратно в список. Если это единственный способ, как бы я держал каждый элемент в списке отдельно друг от друга?

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Вот (плохой) пример того, как этого добиться ... однако более элегантным способом было бы закодировать строки как ISO 8859-1 (я думаю, именно отсюда и взято \ xa0).

my_list = [('11 August 1902\xa0(1902-08-11)Paris, France', None), 
           ('29 July 1991(1991-07-29) (aged\xa088)Paris, France', None), 
           ('\xa0France', None),
           ('\xa0French Army', None),
           ('1921-1959', None), 
           ('General de brigade', None),
           ('Mobile Group 2Mobile Group 1Operational Group North-West', None),
           ('World War IIFirst Indochina War*Battle of Dien Bien Phu', None)]

my_new_list = []

for my_item in my_list:
    tuple_first = my_item[0]

    tuple_first = tuple_first.replace('\xa0', ' ') # I think really this should be
                                                   # encoded with the ISO 8859-1 and
                                                   # in this encoding \xa0 is a non
                                                   # breaking space... but for now
                                                   # I just replace it with a space char
    my_new_list.append(tuple_first)

и вот вывод (новая строка на единицу)

['11 August 1902 (1902-08-11)Paris, France',
'29 July 1991(1991-07-29) (aged 88)Paris, France',
'France',
'French Army',
'1921-1959',
'General de brigade',
'Mobile Group 2Mobile Group 1Operational Group North-West',
'World War IIFirst Indochina War*Battle of Dien Bien Phu'
]
0 голосов
/ 14 января 2019

Это еще один способ увидеть понимание списка, предоставленное Selcuk.

Примечание. Примите решение Сельчука, так как оно правильное. Я просто публикую это, чтобы показать, как работает / выглядит список по сравнению с циклом for

my_list = [('11 August 1902\xa0(1902-08-11)Paris, France', None), 
('29 July 1991(1991-07-29) (aged\xa088)Paris, France', None), 
('\xa0France', None), ('\xa0French Army', None), ('1921-1959', None), 
('General de brigade', None), ('Mobile Group 2Mobile Group 1Operational Group North-West', None),
 ('World War IIFirst Indochina War*Battle of Dien Bien Phu', None)]

new_list = []
for t in my_list:
    t = t[0].replace('\xa0',' ')
    new_list.append(t)

Выход:

print (new_list)
['11 August 1902 (1902-08-11)Paris, France', '29 July 1991(1991-07-29) (aged 88)Paris, France', ' France', ' French Army', '1921-1959', 'General de brigade', 'Mobile Group 2Mobile Group 1Operational Group North-West', 'World War IIFirst Indochina War*Battle of Dien Bien Phu']
0 голосов
/ 14 января 2019

Вам не нужно преобразовывать список в строку (это был бы один из худших методов). Вы можете просто использовать списочные выражения, например:

>>> my_list = [
    ('11 August 1902\xa0(1902-08-11)Paris, France', None),
    ('29 July 1991(1991-07-29) (aged\xa088)Paris, France', None), 
    ('\xa0France', None), 
    ('\xa0French Army', None), 
    ('1921-1959', None), 
    ('General de brigade', None), 
    ('Mobile Group 2Mobile Group 1Operational Group North-West', None), 
    ('World War IIFirst Indochina War*Battle of Dien Bien Phu', None)]
>>> [t[0].replace('\xa0', ' ') for t in my_list]
['11 August 1902 (1902-08-11)Paris, France', '29 July 1991(1991-07-29) (aged 88)Paris, France', ' France', ' French Army', '1921-1959', 'General de brigade', 'Mobile Group 2Mobile Group 1Operational Group North-West', 'World War IIFirst Indochina War*Battle of Dien Bien Phu']

При этом будет использоваться первый элемент в каждом внутреннем кортеже (следовательно, удаляется второй элемент None) и заменяется любой символ \xa0 на один пробел (" ") в нем.

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