查找列表项的索引

时间:2016-03-05 14:56:05

标签: python regex

我有某种心理阻滞或我想的东西。 我有一个使用正则表达式从较大的列表项中提取的日期和时间列表 -

dates = [['2015-2016'], ['24/08/15'], ['0900-1045'], ['1045-1100'], ['1200-1300'], ['1300-1430'], ['1430-1450'], ['1450-1550'], ['31/08/15'], ['0900-1030'], ['1200-1300'], ['1300-1600'], ['07/09/15', '18/09/15'], ['21/09/15'], ['0900-1000'], ['1100-1200'], ['1200-1300'], ['1400-1530']]

我不确定为什么这会创建一个单项列表列表,但它有,我一直试图通过

找到项目的索引
dates.index("0900-1045")

我尝试了各种搜索字符串,上面的搜索字符串,' 0900-1045'"和[' 0900-1045']但是我得到了什么' ValueError:"' 0900-1000'"不在列表中#39;或者我用过的任何文字。 如果可能的话,我会尝试搜索部分字符串,但我不知道如何。

有什么建议为什么找不到它?

斯特沃

8 个答案:

答案 0 :(得分:1)

您发布它的方式,因为您有列表,所以您无法找到该条目。因此,您需要在列表中搜索<​​strong>列表而不是字符串

dates = [['2015-2016'], ['24/08/15'], ['0900-1045'], ['1045-1100']]

dates.index(['0900-1045'])

答案 1 :(得分:1)

dates.index(["0900-1045"])应该有效。如果没有,请发布您的代码。

要搜索部分匹配,您可以执行类似

的操作
import re
filter(lambda x: re.search(partial_string,x[1][0]), enumerate(dates))

获取带索引的匹配列表。

答案 2 :(得分:0)

问题在于您的约会日期&#39;不是字符串列表 - 它是字符串的LISTS列表(所有这些列表的长度为1)。如果你做了     dates.index([&#34; 0900-1045&#34;]) 索引是正确计算的。最好重写您的代码,以便&#39; date&#39;只是一个字符串列表。

答案 3 :(得分:0)

如果你真的不能使用列表作为你正在运行的任何python版本的索引,你可以做

[ x[0] for x in dates ].index('24/08/15')  

或使用地图:

map(lambda(x):x[0], dates).index('24/08/15')

但是使用列表作为索引是最好的方法: enter image description here

答案 4 :(得分:0)

我尝试了以下内容 -

Python 2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.

>>> dates = [['2015-2016'], ['24/08/15'], ['0900-1045'], ['1045-1100'], ['1200-1300'], ['1300-1430'], ['1430-1450'], ['1450-1550'], ['31/08/15'], ['0900-1030'], ['1200-1300'], ['1300-1600'], ['07/09/15', '18/09/15'], ['21/09/15'], ['0900-1000'], ['1100-1200'], ['1200-1300'], ['1400-1530']]
>>> dates.index("0900-1045")

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    dates.index("0900-1045")
ValueError: '0900-1045' is not in list
>>> dates.index(['0900-1045'])
2

正如您所说,您正在获取单个项目列表的列表,那么您还应该在日期列表中搜索列表的索引,这应该像这样进行 -

dates.index(&#34;列表&#34;)

答案 5 :(得分:0)

您应该尝试使用dates.index([“0900-1045”])作为zondo的评论。这是因为您有一个包含列表元素的列表。要获取元素在列表中的位置,您应该将实际的元素参数传递给index方法。 在您的情况下,元素本身就是列表,因此请传递列表。

答案 6 :(得分:0)

虽然其他答案的重点是找到包含目标字符串的列表列表中的子列表,但这里有一个方法可以展平列表列表,以便您可以直接找到字符串的索引。

假设:

>>> dates = [['2015-2016'], ['24/08/15'], ['0900-1045'], ['1045-1100'], ['1200-1300'], ['1300-1430'], ['1430-1450'], ['1450-1550'], ['31/08/15'], ['0900-1030'], ['1200-1300'], ['1300-1600'], ['07/09/15', '18/09/15'], ['21/09/15'], ['0900-1000'], ['1100-1200'], ['1200-1300'], ['1400-1530']]

您可以通过以下方式将列表列表(每个包含一个字符串)展平为平面列表:

>>> dates[:]=[string for li in dates for string in li]

现在dates是一个字符串列表:

>>> dates
['2015-2016', '24/08/15', '0900-1045', '1045-1100', '1200-1300', '1300-1430', '1430-1450', '1450-1550', '31/08/15', '0900-1030', '1200-1300', '1300-1600', '07/09/15', '18/09/15', '21/09/15', '0900-1000', '1100-1200', '1200-1300', '1400-1530']

您的原始.index将有效:

>>> dates.index("0900-1045")
2

答案 7 :(得分:0)

您可以枚举,过滤并进行第一场比赛:

index = next(index for (index, date) in enumerate(dates)
             if "0900-1045" in date)
相关问题