Python 使用if-else的列表理解行为
我阅读了大量“pkl”文件,完成了以下列表理解: 这是我让它工作的唯一方法。如果在If不起作用后添加Python 使用if-else的列表理解行为,python,list-comprehension,Python,List Comprehension,我阅读了大量“pkl”文件,完成了以下列表理解: 这是我让它工作的唯一方法。如果在If不起作用后添加else子句。如果我把If子句放在循环之前,它就不起作用了。你能解释一下原因吗?如果我这样做: a = [pd.read_pickle("my_file"+str(i)+".pkl") if os.path.exists("my_file"+str(i)+".pkl") else print(i) for i in range(1, 18)] 这个不起作用,这与许多关于列表理解的答案相反 谢谢
else
子句。如果我把If
子句放在循环之前,它就不起作用了。你能解释一下原因吗?如果我这样做:
a = [pd.read_pickle("my_file"+str(i)+".pkl") if os.path.exists("my_file"+str(i)+".pkl") else print(i) for i in range(1, 18)]
这个不起作用,这与许多关于列表理解的答案相反
谢谢
a = [pd.read_pickle("my_file"+str(i)+".pkl" if os.path.exists("my_file"+str(i)+".pkl") else your_alternate_value for i in range(1, 18)]
或者我更喜欢格式化它,以防止出现这样长的行:
a = [
pd.read_pickle("my_file"+str(i)+".pkl"
if os.path.exists("my_file"+str(i)+".pkl")
else your_alternate_value
for i in range(1, 18)
]
列表理解对我来说有点难理解如何格式化。也许我更喜欢另一种方式,但我还没有想到
解释
列表理解转换为如下格式
some_list = []
for ...:
for/if ...
...
...
some_list.append(something)
不管你想要多少个街区,但只会越走越深。任何块只能包含另一个块或最终附加值。现在,当你认为列表理解没有缩进时,这是有意义的。如果您有两个If
块,那么理解如何知道else
属于哪一个块
我的解决方案的秘密在于它不是另一个街区;这是附加内容的一部分。if/else是一个表达式,与其他语言中的三元运算符相当。下面是发生的事情:
some_list = []
for ...
some_list.append(something if blah else some_other_thing)
这就是为什么if/else在开头。
(todo1 if condition else todo 2 for item in dataset)
如果要添加else部分
是的,如果cluases最后一个,如果cluases是solo,如果else在操作之后。有点违反直觉。我编辑问题以显示更多细节。在if
语句之前,您是否缺少一个结束语)
?所以a=[pd.read\u pickle(“我的文件”+str(i)+“.pkl”)如果os.path.exists…
?
some_list = []
for ...
some_list.append(something if blah else some_other_thing)