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