需要帮助使用拆分功能

时间:2016-06-26 16:59:43

标签: python python-3.x

此函数将字符串中零之间的数字相加。例如('25025')变为25 + 25。但是,如果我在发送到test_string的字符串参数的字符串的开头和/或结尾处有0,则它会在列表的开头/结尾处创建一个空格,并且不会计算。我可以添加什么来使其过滤掉0和空格?

def test_one(test_string):
      test = test_string.split("0")
      numbers=[int(x) for x in test]
      print(sum(numbers))

test_one('2022022022')
test_one('02022020')
test_one('25025')

4 个答案:

答案 0 :(得分:2)

如果您对保持当前的方法没有问题,那么应该这样做:

sum(int(x) for x in test_string.strip('0').split("0"))
#                                 ^

否则,您可以完全使用生成器表达式中的理解:

    I=imread('1_1.jpg');
    I=rgb2gray(I);
    I2 = Thresholding(I);
    cc = bwconncomp(I2,8);
    n = cc.NumObjects;
    Area = zeros(n,1);
    Centroid = zeros(n,1);
    Perimeter = zeros(n,1);
    MajorAxis = zeros(n,1);
    MinorAxis = zeros(n,1);
    k = regionprops(cc, 'Area','Centroid','Perimeter','MajorAxisLength', 'MinorAxisLength');
    for i=1:n
    Area(i) = k(i).Area;
    Centroid(i)=k(i).Centroid;
    Perimeter(i) = k(i).Perimeter;
    MajorAxis(i) = k(i).MajorAxisLength(i);
    MinorAxis(i) = k(i).MinorAxisLength(i);
    end
    handdata(1,1) = mean(Area);
    handdata(2,1) = mean(Centroid);
    handdata(3,1) = mean(Perimeter);
    handdata(4,1) = mean(MajorAxis);
    handdata(5,1) = mean(MinorAxis);

答案 1 :(得分:1)

替换它:

numbers=[int(x) for x in test]

有了这个:

numbers=[int(x) for x in test if x]

此代码不言自明:将x转换为整数并将其附加到列表if bool(x)True,因此跳过所有空字符串

str.split("0")"0"视为分隔符,在结果中包含任何匹配项。查看the docs以获取一些示例和更多解释。

答案 2 :(得分:1)

您可以使用方法之一 strip()/ rstrip()/ lstrip()

>>> s = '0138076023'
>>> s.lstrip('0')
'138076023'
>>> s.strip('0')
'138076023'
>>> s = '   asasd   '
>>> s.strip()
'asasd'
>>>   

可以找到有关这些方法的文档here

答案 3 :(得分:0)

试试这个

def test_one(test_string):
    test = test_string.split("0")
    print(test)
    if test[0] != '':
        numbers=[int(x) for x in test]
    else:
        test = test[1:]
        numbers=[int(x) for x in test]
    print(sum(numbers))

test_one('2022022022')
test_one('02022022022')

test_one('2022022022')test_one('02022022022')都会返回相同的

当字符串以零结尾时,我的方面出现了错误。做了更正。