【问题标题】:Removing \xa0 from string in a list从列表中的字符串中删除 \xa0
【发布时间】:2016-08-08 13:19:36
【问题描述】:

我有一个包含一堆单词的列表:

lista = ['Jeux Olympiques De Rio\xa02016', 'Sahara Ray', 'Michael Phelps', 'Amber Alert']

我试图替换'\xa0'

for element in listor:
    element = element.replace('\xa0',' ')

但它没有用。此外,当我 print 元素时,它会打印:

print(lista[0])
Jeux Olympiques De Rio 2016

有人知道如何解决这个问题吗?

【问题讨论】:

  • 字符串是不可变的,因此您不会使用第二个代码块更改字符串。您需要替换列表中的元素

标签: python string python-3.x


【解决方案1】:

最简单的方法:

lista = [el.replace('\xa0',' ') for el in lista]

【讨论】:

  • 这可行,但有一个缺点。它在 所有 字符串上调用 replace,即使是那些没有不需要的 unicode 字符的字符串。
  • 但是作者不知道这个字符到底是哪个字符串。
【解决方案2】:
for index, element in enumerate(listor):
    listor[index] = element.replace('\xa0',' ')

现在您正在替换列表中的字符串,而不是尝试更改字符串本身。以前,您将新字符串分配给相同的变量名称,这不会更改先前的字符串,而只会更改“元素”变量指向的字符串。这样,您实际上将用新字符串覆盖列表元素。

【讨论】:

    【解决方案3】:

    如果字符串包含'\xa0',只需使用列表推导替换结尾:

    res = [elem if '\xa0' not in elem else elem.replace('\xa0', '') for elem in lista]
    

    您当前的方法只是一遍又一遍地重新分配一个名称 (element),而没有实际修改列表 lista。列表推导式将使用原始列表中的元素创建一个新列表,即:

    for elem in lista
    

    并替换所有包含\xa0 的字符串,即:

    elem if '\xa0' not in elem else elem.replace('\xa0', '')
    

    【讨论】:

    • 如果替换在字符串中没有发现出现,它只是返回不变的字符串,所以:res = [elem.replace('\xa0', '') for elem in lista] 就可以了
    • @thodnev 当然,但使用in 通常比函数调用快。我不是在争论结果,而是在指出没有必要的事实。
    • 取决于字符串有多长以及列表中有多少字符串需要替换。想象一下,你有一个长字符串,\xa0 接近结尾:在这种情况下,你遍历字符串一次以知道它需要 char,然后在替换例程中第二次。 str.replace 是快速内置方法,内部实现类似于in 成员资格测试,因此它带来的唯一时间开销是点限定
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2015-10-25
    • 2020-12-14
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多