从多维lis中删除'\xa0'字符

2024-10-01 13:29:02 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下列表: (我忘了说我的单子上也有数字,int-s)

foo_list = [['foo', 100], ['\xa0foo', 200], ['foo\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0', 300], ['foo', 400]]

我试过用我在google上找到的以下函数来清理列表:

^{pr2}$

这显然给了我: (新错误)

AttributeError: 'int' object has no attribute 'replace'

是因为这是一个列表吗?我如何修改代码以使其正常工作并删除“\xa0”字符。在

我预期的输出将是一个新列表,其中包含来自foo_list的已清理值。在


Tags: 函数列表objectfoo错误google数字list
1条回答
网友
1楼 · 发布于 2024-10-01 13:29:02

只需在第一个元素上使用str.strip(),保持内部列表的其余部分不变:

[[inner[0].strip('\xa0')] + inner[1:] for inner in foo_list]

\xa0是一个不间断的空格,如果您的值是Unicode字符串,这些字符串将在不指定参数的情况下被删除。您的示例输入由bytestrings组成,因此我使用了一个显式的条带:

^{pr2}$

你也需要使用嵌套的方法来处理每一个嵌套的函数

foo_list_clean = [remove_from_list(inner[:1], u'\xa0') + inner[1:] for inner in foo_list_clean]

但是,不需要使用str.replace(),除非在单词之间有那些\xa0非间断空格;示例只在开头和结尾包含它们。在

请注意,如果一些元素是整数,而其他元素是字符串,则必须执行一些duck类型:

[[s.strip('\xa0') if hasattr(s, 'strip') else s for s in inner]
 for inner in foo_list]

请注意,如果您的输入是unicode对象,则必须使用匹配的u'\xa0'字符串来剥离!或者,只需使用不带参数的unicode.strip()从开始和结束删除所有空白(因为\xa0U+00A0 NO-BREAK SPACE,被认为是空白):

>>> foo_list = [[u'foo', 100], [u'\xa0foo', 200], [u'foo\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0', 300], [u'foo', 400]]
>>> [[inner[0].strip()] + inner[1:] for inner in foo_list]
[[u'foo', 100], [u'foo', 200], [u'foo', 300], [u'foo', 400]]

相关问题 更多 >