我有某种心理阻滞或我想的东西。 我有一个使用正则表达式从较大的列表项中提取的日期和时间列表 -
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;或者我用过的任何文字。 如果可能的话,我会尝试搜索部分字符串,但我不知道如何。
有什么建议为什么找不到它?
斯特沃
答案 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')
答案 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)