在Python中,从用逗号分隔的数字列表中移除千位分隔符

1 投票
5 回答
5626 浏览
提问于 2025-04-16 20:54

我有一份数据列表,像下面这样:

a = ['"105', '424"', '"102', '629"', '"104', '307"']

我想把这些数据整理成下面这样的格式:

a = ['105424', '102629', '104307']

我不知道该怎么做。我想过先把所有的逗号去掉,然后再在应该有逗号的地方加上逗号,最后再去掉引号。但我发现这真的挺难的。

5 个回答

1

你的数据是不是像这样:

"123", "123,456", "123,456,789"

如果是的话,可以试试这个:

input = '"123", "123,456", "123,456,789"'

import re

reg = re.compile('"(\d{1,3}(,\d{3})*)"')

stringValues = [wholematch.replace(',', '') for wholematch, _endmatch 
                                                    in reg.findall(input)]

这个正则表达式也可以处理带小数点的千位数。

re.compile('"(\d{1,3}(,\d{3})*(\.\d*)?)"')
1

如果你的数据是CSV格式的,建议你参考@steven的回答。

无论如何,这里有一种处理你粘贴内容的方法。

正如@troutwine所说,这种方法只有在数字部分总是成对出现时才有效。

a = ['"105', '424"', '"102', '629"', '"104', '307"']

from itertools import izip

def pairwise(iterable):
    "s -> (s0,s1), (s2,s3), (s4, s5), ..."
    a = iter(iterable)
    return izip(a, a)

result = []

for x, y in pairwise(a):
    result.append(''.join([x, y]).strip('"'))

print result

结果是:

['105424', '102629', '104307']

这里的成对代码片段:遍历列表中的每两个元素

4

我假设这些数据最开始是放在一个csv文件里的,里面有些数据包含逗号,比如说“105,424”、“102,629”、“104,307”,然后你可能是通过逗号来分割这些数据:

>>> '"105,424","102,629","104,307"'.split(',')
['"105', '424"', '"102', '629"', '"104', '307"']

其实你应该让csv模块来处理这些数据,因为它可以自动处理那些双引号:

import csv

with open('u:\\foobar.csv', 'rb') as f:
    reader = csv.reader(f)
    for row in reader:
        print [x.replace(',','') for x in row]

这样打印出来的结果是:['105424', '102629', '104307']

撰写回答