我有一个字符串列表,例如:
L = [['(', '11', '.', '253920135318836', '-', '12' ')', '+', '3','.','12']]
目前,当我打印出如上所示的列表时,它正在打印出来"("," 11"并且列表的其余部分没有打印出来。有没有办法解决这个问题,因为我希望能够以这种形式实现:
[['(', '11.253920135318836', '-', '12' ')', '+' ,'3.12']]
但是我正在努力以这种方式做到这一点
谢谢!
答案 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