def string_to_int_list(s):
L1=[]
for i in s.split(','):
if i:#what does this line mean?
L1.append(int(i))
return L1
我想将字符串转换为列表,如果我删除'if i',它会提醒我ValueError:对于带有基数为10的int()的无效文字:''
答案 0 :(得分:1)
如果i
有值,则条件将返回true
,如果i
的值为None
(空),则返回false
。它与i != None
相同。
另外我测试一下,如果split函数返回一个空字符串""
,它将不会传递if条件。
要检查字符串是否为数字(0 - 9),您可以使用str.isdigit()
<强> str.isdigit()强>
如果字符串中的所有字符都是数字且至少有一个字符,则返回true,否则返回false。
对于8位字符串,此方法取决于语言环境。
此代码有效:
def string_to_int_list(s):
L1=[]
for i in s.split(','):
if i and i.isdigit():#what does this line mean?
L1.append(int(i))
return L1
a = "1,2,3,q,43,hello"
b = string_to_int_list(a)
print b
它将返回[1, 2, 3, 43]
请注意,我将缩进删除到return
,因为它在循环内部没有任何意义。
答案 1 :(得分:1)
您在此处执行的操作是将字符串拆分为,
,然后在看到有效值时转换为整数。
让我们说出你的1,2,3,4,,,5
脚本返回的是[1,2,3,4,5]
你应该尝试if条件返回一个空字符串,None,空列表,即[]或{}。
如果您有&#34; abc,2,3,4,5&#34;
,此脚本将失败您还可以使用
等功能循环filter(lambda x : x , map(lambda x : int(x) if x else None, a.split(",")))