如果只有一个元素,则拆分Python

时间:2017-11-20 02:26:37

标签: python split

我正在尝试进行Python拆分,但我的逻辑似乎存在问题。

我有一些数据,用分号分隔。我的数据的一些示例如下:

  • 89; 50; 20
  • 40

我只想从每一行中检索一个值。例如在第1行中,我只想要最后一个值20,而我想从第二行得到40。

我尝试使用以下代码:

fields = fields.split(";")[-1]

它适用于第一行,我得到了20.但是我无法从第二行获取数据,因为它在拆分中只有一个元素。

然后我尝试使用if-else条件,如下所示,但代码无法运行。

if (len(fields.split(";")) > 0):

    fields = fields.split(";")[-1]
else:
    pass

有谁知道如何处理这个问题?我实现的是,如果该行中只有1个值,我会读它。如果有多个值,我将其拆分并取最后一个值。

3 个答案:

答案 0 :(得分:2)

使用strip来规范化输入,问题是对于一个数字情况有额外的;,所以我们应该首先删除它。

In [1]: def lnum(s):
   ...:     return s.strip(';').split(';')[-1]
   ...: 

In [2]: lnum('89;50;20')
Out[2]: '20'

In [3]: lnum('89;')
Out[3]: '89'

In [5]: lnum('10;')
Out[5]: '10'

答案 1 :(得分:2)

因此,如果您看到使用分号('40;')分割字符串 - ;的时间,则会得到两个字符串的列表 - ['40', '']。因此,fields.split(";")[-1]会为输入'40;'返回一个空字符串。

因此,要么在拆分之前剥离最后一个分号;,如下所示。

print('40;'.rstrip(';').split(';')[-1])

或者,您可以这样做:

fields = '40;'.split(';')
if fields[-1]:
    print(fields[-1])
else:
    print(fields[-2])

我更喜欢第一种方法,而不是if/else方法。另外,请查看.strip(), .lstrip(), .rstrip()函数。

答案 2 :(得分:0)

另一种方法是使用re模块。

from re import findall

s1 = '80;778;20'
s2 = '40'

res1 = findall( '\d+', s1)
res2 = findall( '\d+', s2)

print res1[-1]
print res2[-1]