0

我正在尝试删除以下数据列表中的百分号。这样我可以将所有数字更改为浮点数。我尝试了一些不同的选项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%']]
4

3 回答 3

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('%')
于 2013-09-20T21:54:29.953 回答
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
于 2013-09-20T22:11:36.530 回答
0
data = [[float(j.strip('%')) for j in i] for i in data]

此代码遍历主列表中的所有列表,然后依次遍历这些嵌入列表中的所有字符串。对于这些字符串中的每一个,它使用以下方法替换它们:

float(j.strip('%'))

j每个字符串在哪里。

于 2013-09-20T23:14:55.423 回答