我正在学习Python并试图找出一种有效的方法来将由逗号分隔的数字串标记化为列表.格式良好的案例正如我所期望的那样起作用,但形成较少的案例并非如此.
如果我有这个:
A = '1,2,3,4' B = [int(x) for x in A.split(',')] B results in [1, 2, 3, 4]
这是我所期望的,但如果字符串更像是
A = '1,,2,3,4,'
如果我使用与上面相同的列表推导表达式,我得到一个例外.我想我理解为什么(因为一些"x"字符串值不是整数),但我认为有一种方法可以解析这个仍然相当优雅,这样字符串a的标记化工作更直接像strtok(A,",\n\t")在C中迭代调用时会完成.
要清楚我在问什么; 我在Python中寻找一种优雅/高效/典型的方式来拥有以下所有字符串示例:
A='1,,2,3,\n,4,\n' A='1,2,3,4' A=',1,2,3,4,\t\n' A='\n\t,1,2,3,,4\n'
返回相同的列表:
B=[1,2,3,4]
通过某种紧凑的表达方式.
这个怎么样:
A = '1, 2,,3,4 ' B = [int(x) for x in A.split(',') if x.strip()]
x.strip()修剪字符串中的空格,如果字符串全部为空格,则将其设为空.布尔上下文中的空字符串为"false",因此它由列表推导的if部分过滤.