Python 列表理解错误

Python 列表理解错误,python,list,python-2.7,python-3.x,list-comprehension,Python,List,Python 2.7,Python 3.x,List Comprehension,有人能帮我纠正这个列表吗 line_list = [line for line in file.splitlines() if item in line for item in my_list] 因为我得到以下错误 UnboundLocalError: local variable 'item' referenced before assignment 你有点搞砸了: line_list = [line for line in file.splitlines() for item in my

有人能帮我纠正这个列表吗

line_list = [line for line in file.splitlines() if item in line for item in my_list]
因为我得到以下错误

UnboundLocalError: local variable 'item' referenced before assignment

你有点搞砸了:

line_list = [line for line in file.splitlines() for item in my_list if item in line]
过滤器在末端

另外请注意,如果
my_list
中有多个匹配项,则上面可能会在一行中放置多个重复行。下面将检查是否存在任何匹配项,然后仅添加一次行:

line_list = [line for line in file.splitlines() if any(item in line for item in my_list)]

你有点搞砸了:

line_list = [line for line in file.splitlines() for item in my_list if item in line]
过滤器在末端

另外请注意,如果
my_list
中有多个匹配项,则上面可能会在一行中放置多个重复行。下面将检查是否存在任何匹配项,然后仅添加一次行:

line_list = [line for line in file.splitlines() if any(item in line for item in my_list)]

完整循环如下所示:

line_list = []
for line in file.splitlines():
    for item in my_list:
        if item in line:
            line_list.append(line)
line_list = []
for line in file.splitlines():
    line_list.append("no" if line == "yes" else line)
放在同一行,类似这样(不是真正的Python语法):

当然,
.append()
部分对于所有理解都是通用的,因此我们将其放在开头:

line_list = [line for line in file.splitlines() for item in my_list if item in line]
如果你只是想到这样的列表理解,应该很容易弄清楚使用的顺序

当你有
else
语句时,不要让它迷惑你。例如:

line_list = []
for line in file.splitlines():
    if line == "yes":
        line_list.append("no")
    else:
        line_list.append(line)
将被解释为:

line_list = ["no" if line == "yes" else line for line in file.splitlines()]
使用开头的
if
-
else
。为什么?你问。嗯,它可以这样写:

line_list = []
for line in file.splitlines():
    for item in my_list:
        if item in line:
            line_list.append(line)
line_list = []
for line in file.splitlines():
    line_list.append("no" if line == "yes" else line)
你看,理解开始时的部分仍然与传递给
.append()
的部分相同。
else
子句不是理解语法的一部分;这是该语言的一个独立特征



@TigerhawkT3很好地说明了如何使用
any()

完整的循环如下所示:

line_list = []
for line in file.splitlines():
    for item in my_list:
        if item in line:
            line_list.append(line)
line_list = []
for line in file.splitlines():
    line_list.append("no" if line == "yes" else line)
放在同一行,类似这样(不是真正的Python语法):

当然,
.append()
部分对于所有理解都是通用的,因此我们将其放在开头:

line_list = [line for line in file.splitlines() for item in my_list if item in line]
如果你只是想到这样的列表理解,应该很容易弄清楚使用的顺序

当你有
else
语句时,不要让它迷惑你。例如:

line_list = []
for line in file.splitlines():
    if line == "yes":
        line_list.append("no")
    else:
        line_list.append(line)
将被解释为:

line_list = ["no" if line == "yes" else line for line in file.splitlines()]
使用开头的
if
-
else
。为什么?你问。嗯,它可以这样写:

line_list = []
for line in file.splitlines():
    for item in my_list:
        if item in line:
            line_list.append(line)
line_list = []
for line in file.splitlines():
    line_list.append("no" if line == "yes" else line)
你看,理解开始时的部分仍然与传递给
.append()
的部分相同。
else
子句不是理解语法的一部分;这是该语言的一个独立特征



@TigerhawkT3很好地说明了如何使用
any()

是否
any
会像
next
那样短路,只要迭代器中有一个元素的表达式计算结果为True?是,
any()
all()
将短路。
any
会像
next
那样短路吗,只要迭代器中有一个元素的表达式计算结果为True?是的,
any()
all()
会短路。关于如何解释理解的解释非常有趣/清晰!关于如何解释理解的非常有趣/清晰的解释!