关于if,'if + some variable:'(没有任何条件)是什么意思的问题?

时间:2017-02-22 07:17:36

标签: python

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()的无效文字:''

2 个答案:

答案 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(",")))