我正在尝试删除以下数据列表中的百分号。这样我可以将所有数字更改为浮点数。我已经尝试了几个不同的选项string.strip()等。但是,我似乎无法找到一种坚持的方式。我认为这与字符串是不可变的这一事实有关,但我不确定。
我的问题是如何从以下列表中删除%符号?
[['5.71666666667', '2.08%', '11.03%', '13.89%'], ['5.7', '1.36%', '3.04%', '3.90%'], ['5.48333333333', '1.49%', '2.30%', '2.60%']]
先谢谢。
答案 0 :(得分:5)
因为字符串是不可变的你只需要创建带有修改字符串的新列表
例如,如果您的列表存储在数据变量中:
data = [['5.71666666667', '2.08%', '11.03%', '13.89%'],
['5.7', '1.36%', '3.04%', '3.90%'],
['5.48333333333', '1.49%', '2.30%', '2.60%']]
您可以删除每个元素
data = [[i.strip('%') for i in j] for j in data]
或用空字符串替换百分号
data = [[i.replace('%', '') for i in j] for j in data]
但你应该检查实例类型是列表可以包含除字符串之外的任何内容,否则你得到AttributeError
data = [[i.replace('%', '') if isinstance(i, basestring) else i
for i in j] for j in data]
你不能创建新的列表,而是迭代现有的列表并修改它们:
for sublist in data:
for i, val in enumerate(sublist):
if isinstance(v, basestring):
sublist[i] = v.strip('%')
答案 1 :(得分:2)
这是改变列表的解决方案。但你应该更喜欢olegs解决方案,它更简单。
input = [['5.71666666667', '2.08%', '11.03%', '13.89%'], ['5.7', '1.36%', '3.04%', '3.90%'], ['5.48333333333', '1.49%', '2.30%', '2.60%']]
for sublist in input:
for i, s in enumerate(sublist):
sublist[i] = s.strip('%')
print input
答案 2 :(得分:0)
data = [[float(j.strip('%')) for j in i] for i in data]
此代码遍历主列表中的所有列表,然后依次遍历这些嵌入列表中的所有字符串。对于每个字符串,它使用以下代码替换它们:
float(j.strip('%'))
j
是每个字符串。