简单的解决方案:使用空格进行连接,然后将空格添加到拆分函数中的占位符。
示例:
example_list = ['This', 'is', 'QQQQQ', 'an', 'QQQQQ', 'example', 'list', 'QQQQQ', '.']
print(' '.join(example_list).split(' QQQQQ '))
结果:
['This is', 'an', 'example list', '.']
或更广义的:
split_arg = ' {} '.format(place_holder)
example_list = ' '.join(example_list).split(split_arg)
tobias_k 评论后编辑
评论是:“当然,这仅在占位符实际上是一个字符串时才有效,并且如果该搅拌没有出现在任何其他单词中。也就是说,如果占位符是,例如,None,则它将不起作用,' Q',或''——tobias_k"
这是真的,所以我提出了一个更通用的解决方案,因此它应该适用于每个占位符。
import random
import string
example_list = ['This', 'is', None, 'an', None, 'example', 'list', None, '.']
place_holder = None
# create a random string of length 10
random_place_holder = ''.join(random.choices(string.ascii_uppercase + string.digits, k=10))
# Replace all old place holders with our new random string placeholder
example_list = [x if x != place_holder else random_place_holder for x in example_list ]
split_arg = ' {} '.format(random_place_holder)
example_list = ' '.join(example_list).split(split_arg)
print(example_list)
老实说,如果您有一个不方便的占位符(例如 tobias_k 提到的),您最好使用任何其他解决方案。
决定计时:
使用:
example_list = ['This', 'is', None, 'an', None, 'example', 'list', None, '.'] * 10000
place_holder = None
我使用了一个更长的列表,这样随机字符串的创建就不是很耗时的部分,而且当你不使用大列表时,时间安排是愚蠢的。
这个解决方案:
每个循环 11.6 毫秒 ± 153 微秒(平均值 ± 标准偏差。7 次运行,每次 100 次循环)
Rakesh' 循环解决方案:
每个循环 25.8 毫秒 ± 819 微秒(平均值 ± 标准偏差。7 次运行,每次 10 次循环)
RoadRunner 的 groupby:
每个循环 34.4 毫秒 ± 1.21 毫秒(平均值 ± 标准偏差。7 次运行,每次 10 次循环)