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

如果只有一个元素,则Python将被拆分,python,split,Python,Split,我正在尝试进行Python拆分,但我的逻辑似乎有问题 我有一些数据,用分号分隔。我的一些数据示例如下: 89;50;二十 四十 我只想从每行中检索一个值。例如,在第1行中,我只需要最后一个值,即20,我需要第二行中的40 我尝试使用以下代码: fields = fields.split(";")[-1] 第一排有效,我得了20分。但我无法从第二行获取数据,因为它在拆分中只有一个元素 然后我尝试使用下面的if-else条件,但代码无法运行 if (len(fields.split(";"))

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

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

  • 89;50;二十
  • 四十
我只想从每行中检索一个值。例如,在第1行中,我只需要最后一个值,即20,我需要第二行中的40

我尝试使用以下代码:

fields = fields.split(";")[-1]
第一排有效,我得了20分。但我无法从第二行获取数据,因为它在拆分中只有一个元素

然后我尝试使用下面的if-else条件,但代码无法运行

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

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

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

使用
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'

使用
条带
来规范化输入,问题是有额外的
用于一个数字的情况,因此我们应该首先删除它

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'

因此,如果您看到在拆分字符串时-
'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
方法。另外,请查看函数。

因此,如果您在拆分字符串时看到-
'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
方法。另外,请查看功能。

另一种方法是使用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]

另一种方法是使用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]

更好地使用
rstrip
更好地使用
rstrip
您好,对不起,我删除了第二行数据中的分号,刚刚意识到如果只有一个元素,那么末尾将没有分号。@decemberrobot,那么您不应该有任何错误!!您好,很抱歉,我删除了第二行数据中的分号,刚刚意识到如果只有一个元素,那么末尾将没有分号。@decemberrobot,那么您不应该有任何错误!!