从 python 列表中的多个字符串项中删除空格
Removing spaces from multiple string items in a list in python
我在 python 中有一个字符串项目列表:
positions = ['CF', 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
我想从包含 space 的项目中删除 space(例如 ' RAMF'
)。
我已经尝试使用以下代码:
positions = [x.strip(' ') for x in positions]
# AttributeError: 'NoneType' object has no attribute 'strip'
player_positions = [x.text.strip(' ') for x in player_positions]
# AttributeError: 'str' object has no attribute 'text'
positions = map(str.strip, positions)
# <map at 0x7fde15d19a90>
如何在此处删除任何包含 space 的列表项中的 space?
尝试使用我在下面提到的字符串替换功能。
positions = ['CF', 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
print([position.replace(' ','') for position in positions])
解决方案(已编辑):
positions = ['CF', 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
positions = [x.strip(" ") for x in positions]
我推测您的实际列表中可能包含一些不是字符串的项目。使用此列表理解将它们清除:
bad_positions = [p for p in positions if not isinstance(p, str)]
这个问题可能有歧义,所以我将提供 3 个选项:
positions = ['CF', 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
# replace all/any spaces
positions = [p.replace(' ', '') for p in positions]
# remove leading and trailing spaces
positions = [p.strip(' ') for p in positions]
# remove leading and trailing whitespace
positions = [p.strip() for p in positions]
您给定的列表
positions = ['CF', 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
并且代码不会导致您的 所有 错误。特别是
positions = [x.strip(' ') for x in positions]
会很简单。
这可以从您的消息中扣除:
positions = [x.strip(' ') for x in positions]
# AttributeError: 'NoneType' object has no attribute 'strip'
错误告诉您 positions
中至少有一个元素是 None
- 而不是字符串。
player_positions = [x.text.strip(' ') for x in player_positions]
# AttributeError: 'str' object has no attribute 'text'
错误告诉您 player_positions
中至少有一个元素是字符串 - 字符串没有属性 text
。如果 player_positions
与 positions
相同,则意味着 None
值之前至少有 1 个字符串值。
positions = map(str.strip, positions)
# <map at 0x7fde15d19a90>
map
in python returns 一个迭代器 - 该函数在您迭代它时应用于您的值 - 这就是为什么您还没有例外的原因。如果迭代,这会产生与第一个 list._
类似的错误
你会得到所有的错误:
p = ['CF', None, 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
try:
p1 = [x.strip(' ') for x in p]
except Exception as e:
print(type(e), e)
==> <class 'AttributeError'> 'NoneType' object has no attribute 'strip'
try:
p2 = [x.text.strip(' ') for x in p]
except Exception as e:
print(type(e), e)
==> <class 'AttributeError'> 'str' object has no attribute 'text'
try:
p3 = map(str.strip, p)
p3l = list(p3)
except Exception as e:
print(type(e), e)
==> <class 'TypeError'> descriptor 'strip' for 'str' objects doesn't apply to a 'NoneType' object
类似于 <class 'AttributeError'> 'NoneType' object has no attribute 'strip'
从您的数据中过滤掉 None 值可能是您的最佳猜测:
filtered_pos = [p for p in positions if p is not None]
如果你的数据中只有字符串和 None
,你应该没问题。
如果您需要保持 non-strings/None
完整,请仅将 strip()
应用于字符串:
p = ['CF', None, 'LCMF', 42, 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
p1 = [x.strip(' ') if isinstance(x, str) else x for x in p]
print(p1)
将只更改字符串而不会改变其他字符串:
['CF', None, 'LCMF', 42, 'AMF', 'LW', 'RAMF', 'LCMF', 'AMF', 'RB']
我在 python 中有一个字符串项目列表:
positions = ['CF', 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
我想从包含 space 的项目中删除 space(例如 ' RAMF'
)。
我已经尝试使用以下代码:
positions = [x.strip(' ') for x in positions]
# AttributeError: 'NoneType' object has no attribute 'strip'
player_positions = [x.text.strip(' ') for x in player_positions]
# AttributeError: 'str' object has no attribute 'text'
positions = map(str.strip, positions)
# <map at 0x7fde15d19a90>
如何在此处删除任何包含 space 的列表项中的 space?
尝试使用我在下面提到的字符串替换功能。
positions = ['CF', 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
print([position.replace(' ','') for position in positions])
解决方案(已编辑):
positions = ['CF', 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
positions = [x.strip(" ") for x in positions]
我推测您的实际列表中可能包含一些不是字符串的项目。使用此列表理解将它们清除:
bad_positions = [p for p in positions if not isinstance(p, str)]
这个问题可能有歧义,所以我将提供 3 个选项:
positions = ['CF', 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
# replace all/any spaces
positions = [p.replace(' ', '') for p in positions]
# remove leading and trailing spaces
positions = [p.strip(' ') for p in positions]
# remove leading and trailing whitespace
positions = [p.strip() for p in positions]
您给定的列表
positions = ['CF', 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
并且代码不会导致您的 所有 错误。特别是
positions = [x.strip(' ') for x in positions]
会很简单。
这可以从您的消息中扣除:
positions = [x.strip(' ') for x in positions] # AttributeError: 'NoneType' object has no attribute 'strip'
错误告诉您 positions
中至少有一个元素是 None
- 而不是字符串。
player_positions = [x.text.strip(' ') for x in player_positions] # AttributeError: 'str' object has no attribute 'text'
错误告诉您 player_positions
中至少有一个元素是字符串 - 字符串没有属性 text
。如果 player_positions
与 positions
相同,则意味着 None
值之前至少有 1 个字符串值。
positions = map(str.strip, positions) # <map at 0x7fde15d19a90>
map
in python returns 一个迭代器 - 该函数在您迭代它时应用于您的值 - 这就是为什么您还没有例外的原因。如果迭代,这会产生与第一个 list._
你会得到所有的错误:
p = ['CF', None, 'LCMF', 'RW', 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
try:
p1 = [x.strip(' ') for x in p]
except Exception as e:
print(type(e), e)
==> <class 'AttributeError'> 'NoneType' object has no attribute 'strip'
try:
p2 = [x.text.strip(' ') for x in p]
except Exception as e:
print(type(e), e)
==> <class 'AttributeError'> 'str' object has no attribute 'text'
try:
p3 = map(str.strip, p)
p3l = list(p3)
except Exception as e:
print(type(e), e)
==> <class 'TypeError'> descriptor 'strip' for 'str' objects doesn't apply to a 'NoneType' object
类似于 <class 'AttributeError'> 'NoneType' object has no attribute 'strip'
从您的数据中过滤掉 None 值可能是您的最佳猜测:
filtered_pos = [p for p in positions if p is not None]
如果你的数据中只有字符串和 None
,你应该没问题。
如果您需要保持 non-strings/None
完整,请仅将 strip()
应用于字符串:
p = ['CF', None, 'LCMF', 42, 'AMF', 'LW', ' RAMF', ' LCMF', ' AMF', ' RB']
p1 = [x.strip(' ') if isinstance(x, str) else x for x in p]
print(p1)
将只更改字符串而不会改变其他字符串:
['CF', None, 'LCMF', 42, 'AMF', 'LW', 'RAMF', 'LCMF', 'AMF', 'RB']