繁体   English   中英

在 Python 中,从列表中的数字中删除数千个逗号,其中数字用逗号分隔

[英]In Python, removing thousands comma from numbers in a list where the numbers are separated by commas

我有一个类似于下面的数据列表:

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

我希望这些数据采用类似于以下的形式:

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

我不确定如何进行。 我想也许删除所有的逗号,然后只在它们应该插入的地方插入逗号,然后删除引号。 我发现这很有挑战性。

我假设此数据最初位于 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']

如果源数据是 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']

此处的成对片段: 迭代列表中的每两个元素

如果您永远不会有不匹配的对,请在输入列表大小的 1/2 范围内循环,将当前索引和下一个索引混合在一起,进行字符串替换并跳到当前索引加 2。

您的数据是否类似于:

“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*)?)"')

减少救援:

l = ['"105', '424"', '"102', '629"', '"104', '307"', '"123', '456', '789"', '"123"']

# Concatenate everything and split by ", get non-empties
l2 = [num for num in reduce(lambda x, y: x+y, l).split('"') if num != '']

# Output:
# ['105424', '102629', '104307', '123456789', '123']
print l2

但有几点需要注意:此代码可以处理超过数千的数字(即 1,457,664),但也假定整数是双引号。

正如其他人所说,您应该重新访问您的数据检索,因为最有可能的方法是在不处理双引号的情况下正确获取值。 尽管如此,这还是一个有趣的小挑战。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM