2013-03-14 47 views
4

我有一個字符串,我需要在忽略個案的列表中找到索引。找到忽略個案的字符串的索引

MG 
['ADMISSION' ,'Colace','100','mg', 'b.i.d.' , 'insulin','Lente','12'] 

我想在下面一行中找到MG的索引作爲列表。

回答

3

您可以通過將總列表和要搜索的項目轉換爲小寫字母來忽略這些情況。

>>> to_find = 'MG' 
>>> old_list = ['ADMISSION' ,'Colace','100','mg', 'b.i.d.' , 'insulin','Lente','12'] 
>>> new_list = [item.lower() for item in old_list] 
>>> new_list.index(to_find.lower()) 
3 
11

一個更優雅的方式,你可以做到這一點是使用一個發電機:

>>> list = ['ADMISSION' ,'Colace','100','mg', 'b.i.d.' , 'insulin','Lente','12'] 
>>> next(i for i,v in enumerate(list) if v.lower() == 'mg') 
3 

上面的代碼,使發電機,其產生的mg在接下來的不區分大小寫匹配項的索引列表,然後調用next()一次,檢索第一個索引。如果列表中有多次出現mg,則重複調用next()會使它們全部產生。

由於不需要創建整個較低的封裝列表,所以這也具有稍微更便宜的優點;只有儘可能多地處理列表才能找到下一場比賽。

+0

我想'如果v.lower()==「mg''將是既簡單並且更快。順便說一句,'.next()'不如'next(generator_here)'向前兼容。 – DSM 2013-03-14 23:03:29

+0

@DSM啊是的,不知道我在那裏想什麼。修正了,謝謝! – 2013-03-14 23:04:58

+0

@Asad我不遵循語法。如何使用它將項目插入列表的中間? – Mawg 2015-02-16 10:28:09

-1
my_list = ['one', 'TWO', 'THree'] 

try: 
    my_list.lower().index('tWo'.lower()) 
except ValueError: 
    return -1 

返回1


try: 
    my_list.lower().index('fouR'.lower()) 
except ValueError: 
    return -1 

返回-1