是否可以拆分并将其余的列出?

时间:2018-08-04 01:40:19

标签: python

我正在尝试处理这样的行

item1 item2 item3 item4_1 item4_2 item4_3 ...

代码是这样的

data = '''item1 item2 item3 item4_1 item4_2 item4_3'''
for row in data.split("\n"):
    (item1, item2, item3, item4_list) = row.split(' ')

似乎python无法将其余项目解压缩到列表中,有任何想法吗?

3 个答案:

答案 0 :(得分:2)

对于Python3,也许您可​​以尝试(如Brad Solomon在上面的评论中提到的link for Extended Iterable Unpacking ):

(item1, item2, item3, *item4_list) = row.split(' ')

答案 1 :(得分:2)

如果使用两个步骤,并且str.split()maxsplit可能是python 2或3,例如:

data = '''item1 item2 item3 item4_1 item4_2 item4_3'''
for row in data.split("\n"):
    item1, item2, item3, item4_list = row.split(' ', 3)
    item4_list = item4_list.split(' ')
    print(item1, item2, item3, item4_list)

结果:

item1 item2 item3 ['item4_1', 'item4_2', 'item4_3']

答案 2 :(得分:2)

根据学生的建议,您想使用扩展的拆包语法-也就是说,您可以将*rest直接放在目标列表中(与在函数定义中使用*args的方式相同),并且它将吸收其余的值:

item1, item2, item3, *item4_list = row.split(' ')

如果您需要在Python 2中可以使用的工具,那就没有比这更好的了。 (如果已经有这样做的方法,他们就不会添加扩展解压缩功能……)这里最简单的解决方案可能是分两步来完成,使用split的max-splits参数:

item1, item2, item3, rest = row.split(' ', 3)
item4_list = rest.split(' ')