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()
会短路。关于如何解释理解的解释非常有趣/清晰!关于如何解释理解的非常有趣/清晰的解释!