我有一个列表,里面有一些特定的元素。我想根据这些元素将该列表拆分为“子列表”或不同的列表。例如:
test_list = ['a and b, 123','1','2','x','y','Foo and Bar, gibberish','123','321','June','July','August','Bonnie and Clyde, foobar','today','tomorrow','yesterday']
如果元素与“something and something”匹配,我想拆分为子列表:
^{pr2}$到目前为止,如果在特定元素之后有固定数量的项目,我可以完成这项工作。例如:
import re
element_regex = re.compile(r'[A-Z a-z]+ and [A-Z a-z]+')
new_list = [test_list[i:(i+4)] for i, x in enumerate(test_list) if element_regex.match(x)]
这几乎就在那里,但是在特定的兴趣元素后面并不总是有三个元素。有没有比在每一个项目上循环更好的方法?在
如果你想要一条线
会的。然而,python way将使用更详细的变体。在
我在2.1GHz的4核i7上做了一些速度测量。timeit模块运行这个代码1.000.000次,需要11.38秒。使用itertools模块中的
^{pr2}$groupby
(另一个答案是karas variant)需要9.92秒。最快的变体是我建议的冗长版本,只需要5.66秒:您不需要} :
regex
,只需使用^{首先,我们用这个lambda函数
^{pr2}$lambda i : 'and' in i
对列表进行分组,该函数查找其中包含"and"
的元素!然后我们有了这个:因此,我们必须连接这里的2对列表,我们使用
add
运算符和一个列表理解!在相关问题 更多 >
编程相关推荐