繁体   English   中英

查找列表项的索引

[英]Find index of list item

我有某种精神障碍或某些想法。 我有一个使用正则表达式从较大列表项中提取的日期和时间的列表-

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'”不在列表中'或其他我使用的文字。 如果可能,我会尝试搜索部分字符串,但我不知道如何。

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

Stevo

发布方式,因为有lists列表,所以不会找到条目。 因此,你需要搜索列表中的列表不是一个字符串

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

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

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

要搜索部分匹配,您可以执行以下操作

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

获取具有索引的匹配项列表。

问题是您的“日期”不是字符串列表,而是字符串列表的列表(所有这些列表的长度均为1)。 如果改用dates.index([“ 0900-1045”]),则索引计算正确。 最好最好重写代码,以便“日期”只是字符串列表。

如果您确实无法使用列表作为正在运行的任何版本python的索引,则可以执行

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

或使用地图:

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

但是从长远来看,最好使用列表作为索引: 在此处输入图片说明

我尝试了以下方法-

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

正如您所说的,您将获得一个单项列表的列表,那么您还应该在日期列表中搜索列表的索引,这应该是这样的-

date.index(“列表”)

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

虽然其他答案都集中在查找包含目标字符串的列表的列表中的子列表,但这是一种将列表的列表展平的方法,因此您可以直接找到字符串的索引。

鉴于:

>>> 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

您可以枚举,过滤并进行第一个匹配:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM