合并列表项,如果用“/”python分隔

时间:2017-01-22 13:04:33

标签: python python-2.7

我有一个包含驱动器方向信息的现有列表。标题有时用“/”分隔。我想合并仅由这样的斜杠分隔的列表项。在示例中,这将合并索引:5,7,9和11并删除6,8和10。

original_list = ['Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven', '/', 'Lunetten', '/', 'Houten', '/', 'Nieuwegein', '']
output_list = ['Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven/Lunetten/Houten/Nieuwegein', '']

我找不到一个可以处理列表中不同数量的斜杠的好解决方案。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

将字符串连接在一起,然后使用replace删除斜杠周围的分隔符,然后再将其拆分:

'@'.join(L).replace('@/@', '/').split('@')

使用方式如下:

>>> '@'.join(['Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven', '/', 'Lunetten', '/', 'Houten', '/', 'Nieuwegein', '']).replace('@/@', '/').split('@')
['Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven/Lunetten/Houten/Nieuwegein', '']

只要所选的分隔符不出现在字符串中,就可以正常工作。

答案 1 :(得分:0)

不是很优雅的解决方案,但它应该有效。在某些情况下,它会提供与上一个答案不同的结果(例如,斜杠作为original_list中的第一个和最后一个元素),这可能对您有好处:

original_list = ['/', '/', 'Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven', '/', '/', '/', 'Lunetten', '/', 'Houten', '/', 'Nieuwegein', '', '/', '/']
new_list = []

for i in range(len(original_list)):
    if len(new_list) > 0 and i > 0 and (original_list[i] == '/' or original_list[i-1] == '/'):
        new_list[-1] += original_list[i]
    else:
        new_list.append(original_list[i])

print new_list

结果:

['//Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven///Lunetten/Houten/Nieuwegein', '//']