Python - 在字符串列表中连接浮点数

时间:2017-04-05 14:31:32

标签: python string list join

我有一个字符串列表,例如:

L = [['(', '11', '.', '253920135318836', '-', '12' ')', '+', '3','.','12']]

目前,当我打印出如上所示的列表时,它正在打印出来"("," 11"并且列表的其余部分没有打印出来。有没有办法解决这个问题,因为我希望能够以这种形式实现:

[['(', '11.253920135318836', '-', '12' ')', '+' ,'3.12']]
但是我正在努力以这种方式做到这一点 谢谢!

3 个答案:

答案 0 :(得分:1)

我会将它们合并为一个字符串,然后将其拆分为parens,+ / -

>>> import re
>>> L = [['(', '11', '.', '253920135318836', '-', '12' ')', '+', '3','.','12']]

>>> [re.split('([\(\)\+\-])', ''.join(sublist)) for sublist in L]
[['', '(', '11.253920135318836', '-', '12', ')', '', '+', '3.12']]

正如@StevenRumbalski所说,我们可以过滤掉空值:

>>> [filter(None, (re.split('([\(\)\+\-])', ''.join(sublist))) for sublist in L]
[['(', '11.253920135318836', '-', '12', ')', '+', '3.12']]

有人使用正则表达式可能会有不同的建议。

答案 1 :(得分:1)

他们说(哎呀,我说)你不应该在迭代它时改变一个列表。有时,这正是你想要做的。当此代码看到一个句点时,它会向前到达以将下一个列表项与前一个项组合,并修剪列表,以便它不会再次处理下一个项。添加递归调用以处理子列表,并且您已获得胶水代码。

L = [['(', '11', '.', '253920135318836', '-', '12' ')', '+', '3','.','12']]

def glue_floats(alist):
    try:
        newlist = alist[:]
        for i, val in enumerate(newlist):
            if isinstance(val, list):
                # recursively handle sublists
                newlist[i] = glue_floats(val)
            elif val == '.':
                # combine -1 to +1 inclusive and shrink for next iteration
                newlist[i-1:i+2] = [''.join(newlist[i-1:i+2])]
    except IndexError:
        raise ValueError('float missing component')
    return newlist

print(glue_floats(L))

答案 2 :(得分:0)

ResultSet