我有这样的字符串列表:
words = ['hello', 'world', 'name', '1', '2018']
我正在寻找最快的方式(python 3.6)来检测列表中的年份“word”。例如,“2018”是年份。 “1”没有。让我们将可接受的年份范围定义为2000-2020。
检查单词是否为数字('2018'.isdigit()
),然后将其转换为int并检查是否有效范围。
在python中执行此操作的最快方法是什么?
答案 0 :(得分:4)
您可以构建一组有效年份(作为字符串)。然后遍历您要测试的每个单词以检查它是否是有效年份:
words = ['hello', 'world', 'name', '1', '2018']
valid_years = {str(x) for x in range(2000,2021)}
for word in words:
if word in valid_years:
print word
正如Martijn Pieters在评论中提到的,集合是访问具有O(1)复杂度的项目的最快解决方案:
设置允许您在O(1)时间内测试成员资格,使用列表具有线性O(length_of_list)成本
修改强>:
正如您在评论中看到的那样,生成valid_years
集的方法有很多种,只要您的数据结构是集,您就拥有最快的速度做你想做的事。
您可以在这里阅读更多内容:
答案 1 :(得分:-2)
将列表连接到一个带有特殊拆分字符串的字符串。使用正则表达式进行搜索。
例如:
word_tmp = " ".join(words)
re.search("\b20[0-2]\d\b", word_tmp)