检测字符串列表中的年份

时间:2018-04-18 08:55:12

标签: python python-3.x

我有这样的字符串列表:

words = ['hello', 'world', 'name', '1', '2018']

我正在寻找最快的方式(python 3.6)来检测列表中的年份“word”。例如,“2018”是年份。 “1”没有。让我们将可接受的年份范围定义为2000-2020。

可能的解决方案

检查单词是否为数字('2018'.isdigit()),然后将其转换为int并检查是否有效范围。

在python中执行此操作的最快方法是什么?

2 个答案:

答案 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)