从Iterator获取匹配值使用Python中的"if value in list"

Jas*_*oks 1 python

我正在运行以下代码:

if course_name.lower() in [x.split('.')[0].lower() for x in user_courses]:
    do_code()
Run Code Online (Sandbox Code Playgroud)

当do_code()块运行时,我知道course_name.lower()在列表中匹配.有没有办法在course_name.lower()匹配的列表中获取x的值?如您所见,因为我在创建列表时使用[0]索引

[x.split('.')[0].lower() for x in user_courses]
Run Code Online (Sandbox Code Playgroud)

我想要匹配的user_courses的整个值,而不仅仅是course_name.lower()包含的零索引.

谢谢!

Bre*_*arn 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
Run Code Online (Sandbox Code Playgroud)

也就是说,根据相等性过滤列表理解course_name.lower().如果列表中还剩下任何内容,那么它将相等course_name.lower().(理论上可以在列表中留下多个项目,但如果是这样,它们都是相同的,所以我们可以选择第一个.)

我从course_name.lower()列表理解中抽出计算,以避免反复重新计算.