2013-07-05 32 views
1

我運行下面的代碼:獲取匹配的值從迭代器「如果在列表值」在Python

if course_name.lower() in [x.split('.')[0].lower() for x in user_courses]: 
    do_code() 

當do_code()塊的運行,我知道course_name.lower()被匹配在列表中。有沒有辦法在course_name.lower()匹配的列表中獲取x的值?正如你所看到的,因爲我正在創建列表時,[0]指數

[x.split('.')[0].lower() for x in user_courses] 

我想它匹配,不只是零索引user_courses整個價值這是什麼course_name.lower( )包含。

謝謝!

回答

5

您可以通過周圍發生的其他方式做到這一點:

lower_name = course_name.lower() 
matches = [x for x in user_courses if x.split('.')[0].lower() == lower_name] 
if matches: 
    match = matches[0] 
    # match is the matched name 

也就是說,基於與course_name.lower()平等過濾列表,理解。如果列表中還有其他內容,則它將等於course_name.lower()。 (理論上可能有多個項目留在列表中,但如果是這樣,它們都是相同的,所以我們可以取第一個。)

我將course_name.lower()的計算從列表理解中提取出來以避免重新計算它一再。

+0

偉大的解決方案。謝謝! –

1

list.index是爲此而構建的。這個怎麼樣?

wordList = [x.split('.')[0].lower() for x in user_courses] 
try: 
    wordIndex = wordList.index(course_name.lower()) 
except ValueError: 
    do what you will