此函数将字符串中零之间的数字相加。例如('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')
答案 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')
都会返回相同的
当字符串以零结尾时,我的方面出现了错误。做了更正。